AZ Tools

Ferramentas Semver (Parser, Comparador, Bump)

Desenvolvimento

Trabalhar com npm, Cargo, módulos Go ou qualquer ecossistema de pacotes significa olhar pra strings de versão semântica — e errar (tratar 1.10.0 como menor que 1.9.0, perder uma tag prerelease) é o tipo de erro que custa horas. Esta ferramenta faz parse de duas versões nos componentes (major, minor, patch, prerelease, build), compara conforme a especificação oficial de semver.org incluindo ordenação correta de prerelease, e oferece botões de bump de um clique. Abaixo, o expansor de range converte a sintaxe npm mais comum (^1.2.3, ~1.2.3, ~1.2, ^0.x.y pra APIs instáveis) nos limites explícitos ≥inferior <superior — útil quando uma ferramenta só aceita esse formato.

Major1
Menor2
Patch3
Prerelease
Build
Major1
Menor2
Patch10
Prerelease
Build

Comparação

B é maior que A

Coincide com

≥ 1.2.3·< 2.0.0

Como usar

  1. Digite uma versão em cada entrada (Versão A e B); os componentes e a comparação atualizam ao vivo.
  2. Clique num botão de bump (Major / Menor / Patch / Prerelease) sob cada versão pra avançá-la — útil pra planejar um release.
  3. No expansor de range, digite um range como ^1.2.3 ou ~1.2 — os limites aparecem; use Copiar pra pegar a string ≥a.b.c <x.y.z.

Perguntas frequentes

Como funciona a ordem de prerelease?
Por spec, uma versão com prerelease (1.0.0-alpha) é menor que a mesma sem (1.0.0). Dentro dos prereleases, identificadores são comparados da esquerda pra direita: numéricos numericamente, alfanuméricos lexicalmente, e numéricos sempre rankeiam abaixo dos alfanuméricos na mesma posição. Assim 1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < 1.0.0-beta < 1.0.0.
Por que ^0.2.3 expande pra <0.3.0, não <1.0.0?
O caret no npm é tratado especialmente pra 0.x.y porque APIs pré-1.0 são instáveis: um bump em 0.x é tratado como breaking. Então ^0.2.3 só dá match em 0.2.x, e ^0.0.3 só dá match em 0.0.3 exatamente. É o mesmo comportamento do npm.
Metadata de build afeta comparações?
Não — por spec, +build é apenas informativo e ignorado ao comparar versões. 1.0.0+abc e 1.0.0+xyz são iguais.
Qual sintaxe de range é suportada aqui?
O expansor lida com ^x[.y[.z]], ~x[.y[.z]] e x ou x.y sozinhos (que se comportam como ~x e ~x.y respectivamente). Ranges combinados como '>=1.0.0 <2.0.0' ou wildcards como '1.x' não são expandidos — você ainda pode fazer parse de cada versão separadamente.

Ferramentas relacionadas