Pular para o conteúdo

Testador de faixas semver

Semver Range Tester

Verifica quais versões satisfazem uma faixa, compara duas versões e ordena uma lista por precedência.

Responde às duas perguntas que as pessoas de fato têm sobre versionamento semântico: esta versão satisfaz este intervalo, e qual destas versões o npm instalaria. Também compara duas versões por precedência e mostra o que cada incremento de `npm version` produziria.

🔒 Roda inteiramente no seu navegadorsemverversionnpm

Intervalo

Abrange: 1.0.0 ou posterior e anterior a 2.0.0

A gramática de intervalos do npm: `^` `~` `x` `-` `||` e os operadores de comparação. Isso não faz parte do semver.org, que só define o formato da versão e a ordem dela.

Versões

Uma por linha, ou separadas por vírgula.

Quais casam

Pré-lançamentos
  1. —1.0.0-alpha
  2. —1.0.0-alpha.1
  3. —1.0.0-alpha.beta
  4. —1.0.0-beta
  5. —1.0.0-beta.2
  6. —1.0.0-beta.11
  7. —1.0.0-rc.1
  8. casa1.0.0
  9. casa1.2.0seria instalada
  10. —2.0.0-rc.1
  11. —2.0.0
  12. —2.1.3

Comparar duas

Ordem

1.0.0-beta.11 é maior

Diferença

prerelease

A precedência segue à risca a cláusula 11 do semver.org, metadados de build incluídos — ou seja, ignorados.

Próxima versão

Cada tipo de lançamento e a versão que ele produz.
major2.0.0
minor1.3.0
patch1.2.4
premajor2.0.0-alpha.0
preminor1.3.0-alpha.0
prepatch1.2.4-alpha.0
prerelease1.2.4-alpha.0

O que o `npm version <tipo>` produziria.

Tem uma regra que surpreende todo mundo: um pré-lançamento só entra num intervalo quando o próprio intervalo menciona um pré-lançamento do mesmo major.minor.patch. É por isso que ^1.0.0 não casa com 2.0.0-beta.1, e por isso que uma tag rc nunca se instala sozinha sem querer.

Como usar

  1. Escreva o intervalo

    `^1.0.0`, `~1.2.3`, `>=1.2.7 <1.3.0`, `1.2.3 - 2.3.4` e `||` funcionam todos. Abaixo aparece uma descrição em linguagem simples do que ele casa.

  2. Cole as versões que você tem

    Uma por linha, ou separadas por vírgula: a saída de `npm view <pkg> versions` cola direto. Cada uma é marcada como casando ou não, e a que o npm instalaria recebe um rótulo.

  3. Compare duas, ou planeje o próximo release

    O painel de comparação segue exatamente a cláusula 11 do semver.org. A tabela de incrementos mostra o que `npm version major`, `preminor` e os demais produziriam a partir de um ponto de partida dado.

Perguntas frequentes

Por que `^1.0.0` não casa com `2.0.0-beta.1`?

Por duas razões ao mesmo tempo. `^1` nunca chega à major 2, e, separadamente, um pré-lançamento só satisfaz um intervalo quando o próprio intervalo nomeia um pré-lançamento do mesmo major.minor.patch. Essa segunda regra é o motivo de uma tag `rc` nunca se instalar sozinha por acidente.

Por que `^0.2.3` se comporta diferente?

Abaixo de 1.0.0 o acento circunflexo se aperta até a minor: `^0.2.3` permite 0.2.x, mas não 0.3.0, porque se entende que um projeto 0.x quebra a cada minor. É a regra do npm, não a do semver.org, e surpreende as pessoas toda vez.

`1.0.0+build.1` é diferente de `1.0.0`?

Strings diferentes, mesma precedência: a cláusula 10 diz que metadados de build são ignorados na comparação. O que significa que uma ordenação de versões que só diferem em metadados de build não é estável, e duas versões assim não podem ser ordenadas de jeito nenhum.

A sintaxe de intervalos faz parte do semver?

Não. O semver.org define o formato de versão e como duas versões se comparam, e para aí. `^`, `~`, `x` e `||` são a gramática de intervalos do npm, que outros ecossistemas emprestaram ou substituíram: Cargo, Composer e pip diferem cada um nos detalhes.

Pode receber de

Em seguida

Estas aceitam o que esta ferramenta produz, então o resultado pode ir direto.