Resumen

El archivo package-lock.json describe todo el árbol de dependencias de cada paquete instalado. Cuando alguien hace fork de un repositorio no tiene el directorio node_modules.

Con el comando npm install se instalarán las dependencias indicadas en el package.json con la versión indicada. También, se instalarán las sub-dependencias indicadas en package-lock.json con la versión indicada. Pero, ¿qué significan estas diferentes versiones en cada dependencia?

Versionado de paquetes

El versionado de paquetes está conformado por tres valores:

  • Major: el valor que muestra la versión que contiene los cambios importantes del paquete
  • Minor: el valor que muestra la versión que contiene los cambios en funcionalidades, pero no representan un cambio significativo
  • Patch: el valor que muestra la versión que contiene cambios rápidos para solucionar problemas de seguridad o bugs
versionado

Símbolos ^ y ~ para actualizar las versiones minor y patch

Existen dos símbolos que acompañan a este versionado, que sirven para actualizar las versiones minor y patch del paquete:

  • Caret (^): Permite actualizar las versiones minor y patch
  • Tilde (~): Permite actualizar las versiones patch

Por ejemplo, tenemos la versión “5.2.3”:

  • Si tiene el carret ^, actualizará la versión minor y patch, por lo que tendrás versiones como “^5.3.3”, “^5.4.3”, “^5.4.4”, etc.
  • Si tiene la tilde ~, actualizará la versión de patch, por lo que tendrás versiones como “~5.2.4”, “~5.2.5”, “~5.2.6”, etc.

Lo recomendable es quitar estos símbolos y tener la versión exacta para evitar problemas de versionado, principalmente con paquetes que los mantienen pocas personas o no son fiables.

Contribución creada con aportes de: Andrés Guano.