7 - npm y buenas prácticas de desarrollo

Objetivo del tema

Revisarás pautas para mantener proyectos saludables al trabajar con npm: incluir archivos correctos en tu repositorio, separar dependencias de desarrollo, elegir la estrategia adecuada al compartir proyectos y reforzar la seguridad mediante auditorías periódicas.

7.1 Uso de .gitignore y node_modules

El directorio node_modules/ contiene todas las dependencias instaladas y puede ocupar cientos de megabytes. No debería versionarse porque npm puede reconstruirlo a partir de package.json y package-lock.json. Incluye una entrada en .gitignore para evitarlo.

# .gitignore
node_modules/
.env
coverage/

Puedes generar un .gitignore base con la herramienta gitignore de GitHub. Asegúrate de mantener el lockfile dentro del control de versiones para garantizar instalaciones reproducibles.

7.2 Instalar dependencias de desarrollo (ej: eslint, nodemon)

Las dependencias de desarrollo son herramientas utilizadas durante la construcción o pruebas del proyecto pero no necesarias en producción. Instálalas con --save-dev para que queden clasificadas correctamente.

npm install --save-dev eslint nodemon
  • Organizar las dependencias en secciones separadas facilita identificar qué paquetes pueden omitirse en despliegues.
  • En pipelines automatizados, puedes instalar solo dependencias de producción con npm install --omit=dev.
  • Documenta en el README cómo ejecutar las herramientas de desarrollo para estandarizar el flujo de trabajo del equipo.

7.3 Compartir proyectos: npm install vs npm ci

Al clonar un repositorio existen dos comandos principales para instalar dependencias:

  • npm install: resuelve rangos de versiones según package.json y actualiza el lock si encuentra diferencias.
  • npm ci: instala exactamente las versiones listadas en package-lock.json y falla si el lock no coincide. Es ideal para entornos reproducibles como CI/CD.
# Entorno local durante el desarrollo
npm install

# Integraciones continuas o despliegues
npm ci

Utiliza npm ci cuando necesites predictibilidad total o quieras detectar divergencias entre el lock y el manifiesto. Recuerda ejecutar npm install localmente cada vez que incorpores una nueva dependencia para mantener el lock actualizado.

7.4 Seguridad: auditorías con npm audit y correcciones con npm audit fix

npm integra una base de datos de vulnerabilidades que puedes consultar con npm audit. Este comando analiza las dependencias declaradas en el lock e informa riesgos conocidos.

npm audit
npm audit fix
npm audit fix --force
  • npm audit produce un reporte con la severidad y la versión recomendada para cada paquete.
  • npm audit fix intenta aplicar actualizaciones seguras basadas en SemVer.
  • Usa --force solo si comprendes los impactos, ya que puede instalar versiones mayores incompatibles.

Integra auditorías periódicas en tu pipeline y documenta las decisiones cuando postergues una actualización por motivos de compatibilidad.

Resumen didáctico

Mantener node_modules/ fuera del repositorio, clasificar dependencias, elegir la estrategia de instalación apropiada y auditar el proyecto con regularidad mejora la calidad y seguridad de tus aplicaciones. Estas prácticas complementan la gestión técnica de npm y fortalecen la colaboración dentro del equipo.