SemVer, el estándar de versionado en Node.js
Es importante conocer que SemVer, o versionado semántico (semantic versioning en inglés) es el estándar de versiones que utiliza todo el ecosistema de Node.js para gestionar los números de versión.
El SemVer cumple con el siguiente formato:
[Major].[Minor].[Patch] (ejemplo: 5.14.1)
Pero, ¿qué significa cada número exactamente?
- Major: El paquete añade funcionalidad nueva que no tiene porque ser compatible con versiones anteriores. Por lo que puede ocasionar rotura de la aplicación que la use.
- Minor: El paquete añade nueva funcionalidad pero en este caso debe mantener compatibilidad con el código existente.
- Patch: Añade pequeñas correcciones de errores.
De este modo, si accedes al Package.json, verás que las dependencias están instaladas junto a su número de versión de la siguiente manera:
{ dependencies: { lodash: "4.17.15", } }
Símbolos abreviados para gestión de versiones
Si dedicas algo de tiempo en ojear el Package.json, podrás observar ciertos símbolos delante del número de versión. El
símbolo más común es ^
y en este caso se agrega por defecto al ejecutar el comando npm i <paquete>
. A continuación
explico el significado de los símbolos más importantes:
^
: Permite, si actualizas las dependencias, que se instale cualquier versión superior dentro de los minor. Es decir, si tienes instalado^4.17.15
de un paquete, podrá instalarse cualquier versión superior a esa e inferior a5.0.0
. Hay una excepción que debes tener en cuenta, en el caso de las versiones inferiores a1.0.0
la actualización se produce a nivel de Patch. Ejemplo:^0.2.1
, solo actualizará a versiones inferiores a0.3.0
~
: Permite actualizaciones a nivel de Patch>
,>=
,<=
,<
: Permite actualizaciones o instalar librerías mayores a dicha versión, mayores o iguales, menores iguales o menor a la versión indicada.=
: Permite instalar única y exclusivamente la versión exacta. Es lo mismo que no poner nada. Es decir,=1.0.0
es igual que1.0.0
.-
: Permite especificar un rango de versiones que se pueden instalar. Por ejemplo:2.1.0-2.6.2
, esto significa que se pueden instalar cualquier versión entre esos números.||
: Permite combinar sets de versiones. Ejemplo:<2.1 || 2.6>
. Instalar versiones inferiores a2.1
o mayores a2.6
.
Trabajando con versiones específicas
Como ya has imaginado, puedes añadir estos símbolos manualmente modificando el Package.json con tu IDE habitual. Sin embargo, existen una serie de comandos que te permiten hacer toda esta gestión gracias al CLI de Npm.