gestion-de-versiones-en-npm

Cómo gestionar versiones de paquetes NPM

La gestión de versiones se refiere al control que vamos a hacer en nuestro proyecto de las versiones de dependencias. En general las dependencias serán de terceros (de bibliotecas, etc) pero también puede ser de nuestros propios paquetes.

En el caso de NPM, los paquetes que instalemos y gestionemos tienen siempre su versión designada. NPM trabaja con estas versiones para configurar nuestro proyecto. Por tanto, es importante entender cómo especificar y trabajar con estas versiones, para gestionar las nuestro proyecto.

Versionamiento semántico

El versionamiento semántico es una convención utilizada en la gestión de versiones que nos permite asignar un número de versión a nuestro proyecto siguiendo un formato específico. Este formato consta de tres números separados por puntos, así,

MAJOR.MINOR.PATCH
  • El número MAJOR indica un cambio mayor en el proyecto que puede causar incompatibilidades con versiones anteriores.
  • El número MINOR indica la incorporación de nuevas funcionalidades al proyecto sin alterar su compatibilidad con versiones anteriores.
  • El número PATCH indica la corrección de errores o problemas menores sin agregar nuevas funcionalidades ni alterar la compatibilidad con versiones anteriores.

Más información sobre versionado semántico en esta entrada Qué es el versionado en programación

Control de versiones en NPM

El gestor de paquetes NPM nos proporciona herramientas para gestionar las versiones de las dependencias de nuestros proyectos de manera sencilla.

A través del archivo package.json, podemos especificar las dependencias necesarias para nuestro proyecto y las versiones específicas que queremos utilizar.

Por ejemplo, si queremos utilizar la versión 2.1.0 de una dependencia llamada lodash, podemos agregar la siguiente línea al archivo package.json:

"dependencies": {
  "lodash": "2.1.0"
}

De esta manera, cuando ejecutemos el comando npm install, NPM instalará exactamente la versión 2.1.0 de la dependencia lodash en nuestro proyecto.

Rangos de versiones

Además de especificar una versión exacta de una dependencia, NPM nos permite utilizar rangos de versiones para indicar qué versiones son compatibles con nuestro proyecto. Algunos ejemplos de rangos de versiones son:

  • ^2.1.0: indica que cualquier versión mayor o igual a 2.1.0 y menor a 3.0.0 es compatible.
  • ~2.1.0: indica que cualquier versión mayor o igual a 2.1.0 y menor a 2.2.0 es compatible.
  • >=2.1.0 <3.0.0: indica que cualquier versión mayor o igual a 2.1.0 y menor a 3.0.0 es compatible.

Estos rangos de versiones nos permiten especificar de manera más flexible las dependencias de nuestro proyecto y aprovechar las actualizaciones y mejoras que se realicen en las versiones posteriores.

Bloqueo de versiones

En algunos casos, puede ser necesario bloquear la versión de una dependencia para evitar actualizaciones automáticas. Para ello, podemos utilizar el carácter = seguido de la versión específica que queremos bloquear.

Por ejemplo, si queremos bloquear la versión de la dependencia lodash en la versión 2.1.0, podemos agregar la siguiente línea al archivo package.json:

"dependencies": {
  "lodash": "=2.1.0"
}

Esto nos asegura que la versión de lodash se mantendrá en la versión 2.1.0 siempre, mientras que no modifiquemos explícitamente esta línea en nuestro fichero package.json.