Escribe un rango de package.json (^1.2.3, ~1.2.3, 1.x, >=1.0.0 <2.0.0, ||) y mira exactamente qué versiones acepta. Carga la lista real de versiones de cualquier paquete npm o pega la tuya.
Prueba:
Equivale a
>=1.2.3 <2.0.0-0
como mínimo 1.2.3, por debajo de 2.0.0, sin ninguna de sus preversiones
Versión más alta aceptada: 1.9.9 · 4 de 9 versiones aceptadas
^ (caret) permite cualquier cambio que no modifique el primer número distinto de cero por la izquierda: ^1.2.3 es >=1.2.3 <2.0.0, pero ^0.2.3 es >=0.2.3 <0.3.0 y ^0.0.3 solo acepta 0.0.3.
~ (tilde) permite parches cuando se indica una menor: ~1.2.3 es >=1.2.3 <1.3.0. ~1 equivale a 1.x.
x, X y * son comodines: 1.x es >=1.0.0 <2.0.0. Una parte ausente cuenta como comodín, así que 1.2 significa 1.2.x.
Un espacio significa Y, || significa O. Un rango con guion 1.2.3 - 2.3.4 incluye ambos extremos; un extremo superior parcial como - 2.3 significa por debajo de 2.4.0.
Las preversiones (1.3.0-beta.1) quedan excluidas salvo que el propio rango nombre una preversión del mismo major.minor.patch. Es la regla que más sorprende.
Lógica escrita según las reglas de node-semver 7 que usa npm (modo estricto, includePrerelease desactivado) y comprobada contra el paquete semver antes de publicar. Las listas de versiones llegan directamente de registry.npmjs.org en tu navegador; no se envía nada a VersionDude.
Un rango flota. Tu máquina de build no debería.
Un caret deja que la próxima instalación elija una versión más nueva; solo el lockfile y la máquina que ejecuta npm ci hacen reproducibles los builds. Infomaniak, proveedor suizo respetuoso con la privacidad, ofrece VPS y servidores cloud para ejecutar tus propias máquinas de build e integración continua.