Regístrate para acceder a más de 15 cursos gratuitos de programación con un simulador

Archivo de bloqueo JS: Configuración del entorno

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.


Trabajo independiente

📦 Actualiza y controla versiones de paquetes

Vamos a ver cómo actualizar dependencias y cómo fijar versiones exactas para que el comportamiento de tu proyecto sea más predecible.

1️⃣ Clona y actualiza el proyecto de ejemplo:

git clone https://github.com/hexlet-boilerplates/nodejs-package.git
cd nodejs-package
npm update

💡 Este comando instala las últimas versiones permitidas por las reglas definidas en package.json.

2️⃣ Revisa qué cambió en package-lock.json

Este archivo registra las versiones exactas que se instalaron. Compara su contenido con:

git diff

3️⃣ Fija una versión exacta de un paquete:

  • Abre package.json en tu editor.
  • Busca una dependencia como "eslint": "^8.0.0".
  • Cambia esa línea a "eslint": "8.10.0" (sin el símbolo ^).

🔍 Para saber qué versiones existen, puedes usar:

npm info eslint versions --json

📥 Luego instala esa versión específica:

npm install

4️⃣ Confirma el cambio:

Verifica que la versión instalada sea la que pediste:

git diff

Para acceder completo a curso necesitas un plan básico

El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.

Obtener acceso
130
cursos
1000
ejercicios
2000+
horas de teoría
3200
test

Obtén acceso

Cursos de programación para principiantes y desarrolladores experimentados. Comienza tu aprendizaje de forma gratuita

  • 130 cursos, 2000+ horas de teoría
  • 1000 ejercicios prácticos en el navegador
  • 360 000 estudiantes
Al enviar el formulario, aceptas el «Política de privacidad» y los términos de la «Oferta», y también aceptas los «Términos y condiciones de uso»

Nuestros graduados trabajan en empresas como:

Bookmate
Health Samurai
Dualboot
ABBYY