Comparar, ordenar versões semver e verificar ranges npm

Ranges npm (^, ~, x, ||, hífen) com explicação, comparar, ordenar e incrementar.

Examples: ^1.2.3, ~1.4, >=2.0.0 <3, 1.2 - 2.3, 1.x || >=3.0.0-beta.1

Paste the list from npm view <package> versions, a changelog or your tags.

Off by default: a pre-release only matches a range that mentions a pre-release of the same x.y.z.

Means >=1.2.3 <2.0.0-0

Highest matching version: 1.9.9

VersionSatisfiesWhy
1.2.3 yespasses >=1.2.3 <2.0.0-0
1.2.10 yespasses >=1.2.3 <2.0.0-0
1.3.0-beta.1 nopre-release, and ^1.2.3 names no pre-release of 1.3.0
1.9.9 yespasses >=1.2.3 <2.0.0-0
2.0.0-rc.1 nofails <2.0.0-0
2.0.0 nofails <2.0.0-0
v1.4.0 yespasses >=1.2.3 <2.0.0-0
1.02.0—invalid: numbers may not have leading zeros

O que faz

Quatro abas. Verificar range marca cada versão como compatível ou não com o motivo (qual comparador passa ou falha, ou a regra de pré-lançamentos do npm), mostra o significado real do range (^1.2.3 é >=1.2.3 <2.0.0-0) e a versão mais alta compatível, a que o npm install escolheria. Comparar duas diz qual é maior e qual parte decide. Ordenar aplica a ordem SemVer. Incrementar mostra o resultado de cada tipo de incremento do npm.

Precedência e ranges

Major, minor e patch são comparados como números (1.10.0 é maior que 1.9.0). Um pré-lançamento é menor que a versão final: 1.0.0-rc.1 < 1.0.0. Identificadores numéricos são comparados como números, por isso beta.11 > beta.2; os metadados após + são ignorados. ^1.2.3 aceita qualquer 1.x a partir de 1.2.3; ^0.2.3 fica abaixo de 0.3.0; ~1.2.3 aceita só mudanças de patch. Por padrão ^1.2.3 não aceita 1.3.0-beta.1: um pré-lançamento só é aceito se o range citar um pré-lançamento do mesmo major.minor.patch.

Perguntas frequentes

Qual a diferença entre ^ e ~?

^1.2.3 aceita versões 1.x a partir de 1.2.3; ~1.2.3 só 1.2.x.

Por que ^1.2.3 não aceita 1.3.0-beta.1?

O npm exclui pré-lançamentos a menos que o range cite um do mesmo major.minor.patch.

Metadados de build afetam a ordem?

Não, a parte após + é ignorada.