Comparar, ordenar versiones semver y comprobar rangos npm

Rangos npm (^, ~, x, ||, guion) con explicación, 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

Qué hace

Cuatro pestañas. Comprobar rango marca cada versión como válida o no con el motivo (qué comparador cumple o incumple, o la regla de prereleases de npm), muestra el significado real del rango (^1.2.3 es >=1.2.3 <2.0.0-0) y la versión más alta que encaja, la que elegiría npm install. Comparar dos indica cuál es mayor y qué parte decide. Ordenar aplica el orden SemVer. Incrementar muestra el resultado de cada tipo de incremento de npm.

Precedencia y rangos

Major, minor y patch se comparan como números (1.10.0 es mayor que 1.9.0). Una prerelease es menor que la versión final: 1.0.0-rc.1 < 1.0.0. Los identificadores numéricos se comparan como números, por eso beta.11 > beta.2; los metadatos tras + se ignoran. ^1.2.3 admite cualquier 1.x desde 1.2.3; ^0.2.3 se queda por debajo de 0.3.0; ~1.2.3 solo admite cambios de patch. Por defecto ^1.2.3 no admite 1.3.0-beta.1: una prerelease solo encaja si el rango menciona una prerelease del mismo major.minor.patch.

Preguntas frecuentes

¿Qué diferencia hay entre ^ y ~?

^1.2.3 admite versiones 1.x desde 1.2.3; ~1.2.3 solo 1.2.x.

¿Por qué ^1.2.3 no admite 1.3.0-beta.1?

npm excluye prereleases salvo que el rango nombre una del mismo major.minor.patch.

¿Afectan los metadatos de compilación al orden?

No, la parte tras + se ignora.