JS: Configuración del entorno

Teoría: Archivo de bloqueo

En esta lección, vamos a aprender a manejar las dependencias de un proyecto usando npm. No te asustes: lo vamos a hacer paso a paso, como si estuviéramos trabajando en un mismo equipo.

Al final, vas a saber cómo actualizar paquetes sin dañar tu aplicación, entender cómo funcionan las versiones en package.json y qué es ese archivo llamado package-lock.json que muchas veces ignoramos.


¿Por qué debemos actualizar las dependencias?

Las bibliotecas que usamos en nuestros proyectos siempre están cambiando. Se actualizan constantemente para:

🐞 Corregir errores (bugs)

⚡ Hacer el código más rápido

✨ Agregar nuevas funcionalidades

Por eso, es importante saber actualizarlas de forma segura.


¿Cómo actualizamos con npm?

Si estamos trabajando con un proyecto que usa npm (el gestor de paquetes de Node.js), hay dos formas comunes de actualizar dependencias:

Actualizar todas las dependencias

npm  update

Este comando intenta actualizar todos los paquetes de acuerdo con lo que esté permitido en tu archivo package.json.

Actualizar una dependencia específica

npm  update  nombre-del-paquete

Este comando actualiza solo el paquete que indiques, si es que hay una versión más reciente compatible con lo que pusiste en package.json.


Definir las versiones en package.json

En el archivo package.json definimos qué versiones de cada dependencia necesitamos. Vamos a ver un ejemplo:

"dependencies": {
"package1": "*",
"package2": "1.3.5",
"package3": "~2.3.4",
"package4": "^2.3.4"
}
Versión¿Qué significa?
"*"Acepta cualquier versión disponible. Puede ser arriesgado.
"1.3.5"Solo admite esa versión exacta. No se actualizará nunca automáticamente.
"~2.3.4"Permite actualizar solo el último número: correcciones menores, como 2.3.5.
"^2.3.4"Permite actualizar dentro de la misma versión mayor: desde 2.3.4 hasta 2.x.x, pero no 3.0.0.

¿Cuál opción deberíamos usar?

⚠️ "*": Muy riesgoso. Puedes terminar instalando algo que rompa tu código.

🔒 "1.3.5": Súper seguro, pero quedarás con versiones viejas (sin mejoras ni parches).

"~" y "^": Son las más recomendadas. Permiten actualizaciones controladas.


El archivo de bloqueo: package-lock.json

Cuando instalamos dependencias con npm, se genera automáticamente un archivo llamado package-lock.json.

Este archivo sirve para:

  • Guardar las versiones exactas que se instalaron (incluyendo las dependencias internas de otros paquetes, conocidas como dependencias transitivas).

  • Garantizar que todos en el equipo de desarrollo tengamos las mismas versiones.

  • Evitar sorpresas al instalar nuevas versiones sin que nos demos cuenta.

¿Qué son las dependencias transitivas?

Son paquetes que no instalamos directamente, pero que vienen incluidos porque nuestras dependencias principales los necesitan.

Ejemplo:

Imagina que instalamos una biblioteca A:

  • Nosotros instalamos A.
  • Pero A necesita B para funcionar. Entonces, npm instala también B.

Esto puede volverse un problema si B se actualiza y deja de ser compatible con A, o si rompe algo en nuestro código. A esta situación se le conoce como: el infierno de las dependencias transitivas 😈

Por eso es que package-lock.json es tan importante: evita que se instalen versiones inesperadas de esas dependencias.

Ejemplo de package-lock.json

{
"name": "mi-proyecto",
"version": "1.0.0",
"dependencies": {
"express": {
"version": "4.17.1",
"requires": {
"body-parser": "^1.19.0",
"cookie-parser": "~1.4.5"
}
}
}
}

Este archivo guarda exactamente qué versión de cada paquete (y subpaquete) fue instalada. Así, si alguien más clona el proyecto, tendrá la misma configuración.

❗ No deberías editar este archivo manualmente. Npm lo actualiza solo cada vez que hacemos cambios en nuestras dependencias.

Árbol de dependencias transitivas


¿Cómo garantizar que todos en el equipo usen las mismas versiones?

Si varias personas trabajan sobre el mismo proyecto o vas a instalar dependencias en producción, lo ideal es usar:

npm  ci

Este comando:

  • Instala exactamente las versiones que están en package-lock.json.

  • Borra la carpeta node_modules y reconstruye todo desde cero.

  • Es más rápido y predecible que npm install.

Úsalo especialmente en:

  • Servidores

  • Entornos de producción

  • Proyectos colaborativos

  • Sistemas de integración continua (como GitHub Actions o Docker)


Resumen

  • Las dependencias deben actualizarse para recibir mejoras y parches de seguridad.
  • Usa npm update para actualizar todas, o npm update nombre-del-paquete para una sola.
  • En package.json<, los símbolos ~ y ^ permiten actualizar versiones sin perder compatibilidad.
  • El archivo package-lock.json fija versiones exactas, incluyendo las dependencias transitivas.
  • No edites package-lock.json a mano: npm lo maneja automáticamente.
  • Usa npm ci para asegurar que se instalen siempre las mismas versiones en todos los entornos.

Si entiendes bien cómo funcionan las versiones y el sistema de bloqueo de npm, podrás mantener tus proyectos actualizados sin miedo a que algo se rompa.

Completado

0 / 11