Validador SemVer
Valide versões semânticas e interprete intervalos.
Versão
- MAJOR
- MINOR
- PATCH
- Pré-lançamento
- Metadados de build
Intervalo
Resultado JSON
O que conta como versão
Gramática estrita do SemVer 2.0.0. Os três números são inteiros ASCII não negativos, sem zeros à esquerda.
- MAJOR.MINOR.PATCH
- quebra / compatível / correção
- 1.2.3-alpha.1
- pré-lançamento, fica abaixo de 1.2.3
- 1.2.3+build.5
- metadados de build, ignorados na precedência
- 1.2.3-0.3
- identificadores numéricos de pré-lançamento são comparados como números
- v1.2.3
- não é uma versão semântica (FAQ da especificação)
- 01.2.3
- inválido: zero à esquerda
- 1.2.3-01
- inválido: pré-lançamento numérico com zero à esquerda
- 1.2.3+0.09
- válido: metadados de build podem ter zeros à esquerda
Operadores de intervalo
- 1.2.3
- exatamente esta versão
- ^1.2.3
- compatível: >=1.2.3 <2.0.0-0
- ~1.2.3
- somente patch: >=1.2.3 <1.3.0-0
- >=1.2.3 <2.0.0
- E de comparadores em um conjunto
- 1.2.3 - 2.0.0
- intervalo inclusivo, espaços obrigatórios dos dois lados
- 1.2.x / 1.x / *
- versões parciais e curingas
- a || b
- união: qualquer um dos conjuntos pode corresponder
- ~>1.2.3
- alias histórico do npm, tratado como ~1.2.3
Como o npm preenche versões parciais
Verificado com o node-semver; o sufixo -0 é um sentinela do npm que exclui pré-lançamentos da próxima série.
| Intervalo | Expandido |
|---|---|
| ^1.2.3 | >=1.2.3 <2.0.0-0 |
| ^0.2.3 | >=0.2.3 <0.3.0-0 |
| ^0.0.3 | >=0.0.3 <0.0.4-0 |
| ^1 | >=1.0.0 <2.0.0-0 |
| ~1.2.3 | >=1.2.3 <1.3.0-0 |
| ~1.2 | >=1.2.0 <1.3.0-0 |
| ~1 | >=1.0.0 <2.0.0-0 |
| 1.2.x | >=1.2.0 <1.3.0-0 |
| 1.x | >=1.0.0 <2.0.0-0 |
| 1.2.3 - 2.0.0 | >=1.2.3 <=2.0.0 |
| 1.2.3 - 2 | >=1.2.3 <3.0.0-0 |
| >1.x | >=2.0.0 |
Precedência de pré-lançamento
1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0
Identificadores numéricos são comparados como números e ficam abaixo dos alfanuméricos; um prefixo mais curto fica abaixo. Metadados de build nunca importam.
Erros comuns
Estes são colados direto do package.json e de históricos de chat.
- "1.2.3",
- As aspas e a vírgula vieram do package.json - cole somente a versão.
- v1.2.3
- Tags do Git carregam um v; versões semânticas não.
- 1.2
- Dois números são um intervalo, não uma versão.
- 1.2.3-01
- O modo loose do npm lê como 1.2.3-1 e reescreve silenciosamente.
Qual conjunto de regras é usado
- O veredito sobre uma string de versão é o SemVer 2.0.0 estrito - sem modo loose, sem reescrita, sem normalização.
- Os intervalos seguem o node-semver do npm, porque a especificação SemVer não define intervalos.
- Esta ferramenta é mais rígida que o npm em intervalos: um prefixo v ou um zero à esquerda dentro de um intervalo é rejeitado, e um lado vazio do || é erro em vez de "qualquer versão".
- As leituras npm mostradas para uma versão inválida vêm de semver.valid(v, {loose:true}) e semver.coerce(v). São apenas informativas - nunca uma aprovação.
- As posições contam pontos de código e começam em 1 na interface, e em 0 no JSON.
Como usar
- Cole uma versão como 1.2.3-beta.1+build.5 no campo à esquerda. Tudo abaixo é atualizado enquanto você digita - não há botão para pressionar.
- Opcionalmente, cole um intervalo npm como ^1.2.0 à direita para ver como a versão e o intervalo se relacionam.
- Leia o selo primeiro: válida ou não e, se não, qual regra quebrou em qual caractere.
- Marque Incluir pré-lançamento quando quiser a leitura includePrerelease do npm para o intervalo.
- Expanda o resultado JSON para copiar ou baixar a lista completa de problemas.
Exemplo resolvido
Versão + intervalo
1.2.3-beta.1+build.5 ^1.2.0
Resultado
SemVer válido (MAJOR 1, MINOR 2, PATCH 3, pré-lançamento beta.1, build build.5). ^1.2.0 expande para >=1.2.0 <2.0.0-0, limites [1.2.0, 2.0.0). Veredito: não satisfeito - o conjunto não tem comparador de pré-lançamento para 1.2.3.
Marque Incluir pré-lançamento e o mesmo par passa a ser satisfeito.
Limitações
- O veredito é o SemVer 2.0.0 estrito, então v1.2.3 e 1.2.3-01 são rejeitados mesmo que o modo loose do npm os aceite ou reescreva.
- Os intervalos seguem somente o node-semver do npm - git describe, Cargo, PEP 440 e versões de módulos Go estão fora do escopo.
- Sem consultas a registros: a ferramenta não consegue dizer qual versão ^1.2.0 realmente instalaria.
- Uma versão e um intervalo por vez - sem listas em lote, ordenação, comparação par a par ou prévia de incremento.
- Números principais acima de Number.MAX_SAFE_INTEGER são sinalizados e comparados como texto, nunca convertidos para número JS.
- Nada sai da página: sem rede, sem armazenamento, sem parâmetros na URL - recarregar limpa tudo.
Ferramentas relacionadas
Mais auxiliares para desenvolvedores que rodam inteiramente no seu navegador.