Testador de Range SemVer
Testa quais versões satisfazem um range semver (^1.2.3, ~2.0, >=1 <2) e explica o intervalo em limite inferior e superior.
Aceita ^1.2.3, ~2.0, >=1 <2, 1.2.x, 1.2.3 - 2.3.4 e ^1 || ^2.
Range normalizado
Versão a versão
| Versão | Satisfaz? | Conjunto que casou | Motivo |
|---|
Caret, til e pré-lançamentos
O caret trava o campo mais à esquerda que não é zero, então ^1.2.3 aceita até 1.999.999 e ^0.2.3 para em 0.2.x, porque na linha 0.x é o minor que carrega as quebras. O til é mais restrito: ~1.2.3 só move o patch. Escrever ~1 é a exceção, já que sem minor não há nada abaixo para segurar, e ele se comporta como ^1.
Um pré-lançamento como 2.0.0-rc.1 ordena abaixo de 2.0.0, então por comparação pura ele cabe em >=1.0.0 <2.0.0. Mesmo assim o npm recusa, a não ser que o próprio range cite um pré-lançamento com o mesmo major.minor.patch — por isso ^1.2.3 nunca pega 1.5.0-beta, mas >=1.5.0-beta.0 pega.
O que o range ^1.2.3 realmente aceita
O package.json pede ^1.2.3, o lockfile trouxe a 1.9.5 e alguém no code review quer saber se isso está certo. Cole o range e a lista de versões publicadas do pacote: cada linha sai marcada com um visto ou um x, o conjunto que casou e o motivo exato da recusa, do tipo 2.0.0 acima do limite superior <2.0.0. Nada é enviado para servidor nenhum, a conta roda no próprio navegador.
Antes de comparar qualquer coisa, o operador vira um par de limites. O caret ^1.2.3 abre até 2.0.0 sem incluir, mas ^0.2.3 para em 0.3.0, porque na linha 0.x é o minor que carrega as mudanças que quebram. O til ~1.2.3 libera só o patch. Curinga 1.2.x, faixa 1.2.3 - 2.3.4 e alternativas com barra dupla também são normalizadas, então dá para comparar dois ranges escritos de jeitos diferentes.
A pegadinha mora no pré-lançamento. Por ordenação pura, 2.0.0-rc.1 é menor que 2.0.0 e caberia em ^1.2.3, mas o npm só aceita uma versão com hífen quando o próprio range cita um pré-lançamento com o mesmo major.minor.patch. Por isso ^1.2.3 nunca instala 1.5.0-beta, enquanto >=1.5.0-beta.0 <2.0.0 instala sem reclamar. A caixa de incluir pré-lançamentos mostra os dois cenários lado a lado.
Perguntas frequentes
Qual a diferença prática entre ^1.2.3 e ~1.2.3?
Por que a versão beta aparece como recusada?
O que 1.2.x e ^0.0.3 significam?
Ferramentas Relacionadas
Gerador de package.json
Construa um package.json mínimo: name, version, description, scripts, license, repository, type (module/commonjs). Tudo no navegador.
Comparador de JSON
Compare dois objetos JSON e visualize as diferenças lado a lado: campos adicionados, removidos e modificados. Suporta estruturas aninhadas. Processado no navegador.
Comparador de Traduções i18n
Compara dois arquivos JSON de tradução e aponta chaves faltando, sobrando, vazias e placeholders divergentes entre os dois idiomas.