Módulo 6·teoria·2h
Objetivos de aprendizaje
- Inicializar un proyecto Node.js con npm init
- Distinguir entre dependencias de producción y desarrollo
- Entender el sistema de versiones semántico (SemVer)
- Escribir y ejecutar scripts en package.json
- Usar las banderas --save, --save-dev y -g correctamente
NPM: Comandos y Gestión de Paquetes
NPM (Node Package Manager) es el gestor de paquetes oficial de Node.js y el repositorio de software más grande del mundo, con más de 2 millones de paquetes disponibles.
Inicializar un proyecto
bash
# Modo interactivo (hace preguntas)
npm init
# Modo automático (valores por defecto)
npm init -yEl resultado es un package.json — el archivo central de todo proyecto Node.js:
json
{
"name": "mi-proyecto",
"version": "1.0.0",
"description": "",
"main": "index.js",
"type": "module",
"scripts": {
"start": "node index.js",
"dev": "nodemon index.js"
},
"dependencies": {},
"devDependencies": {}
}Instalar paquetes
bash
# Dependencia de producción (va a "dependencies")
npm install express
npm install express dotenv
# Dependencia de desarrollo (va a "devDependencies")
npm install --save-dev nodemon
# Paquete global (disponible en cualquier proyecto)
npm install -g nodemon pm2
# Instalar todas las dependencias del package.json
npm install¿Cuándo usar --save-dev?
dependencies: Paquetes que necesita tu app en producción (Express, axios, dotenv)devDependencies: Paquetes que solo usas durante el desarrollo (nodemon, eslint, jest)
Versiones semánticas (SemVer)
El formato es MAJOR.MINOR.PATCH:
code
1.4.2
│ │ └── PATCH: corrección de bugs (compatible)
│ └──── MINOR: nueva funcionalidad (compatible)
└────── MAJOR: cambios que rompen compatibilidadRangos de versión en package.json
json
{
"dependencies": {
"express": "^4.18.2", // ^ acepta MINOR y PATCH más nuevos (>=4.18.2 <5.0.0)
"axios": "~1.4.0", // ~ acepta solo PATCH más nuevos (>=1.4.0 <1.5.0)
"lodash": "4.17.21", // Versión exacta, sin actualizaciones
"chalk": "*" // Cualquier versión (NO recomendado en producción)
}
}Comandos esenciales
bash
# Ver paquetes instalados (árbol de dependencias)
npm list
npm list --depth=0 # Solo primer nivel
# Actualizar paquetes
npm update # Todos según rangos del package.json
npm update express # Solo uno
# Desinstalar un paquete
npm uninstall express
npm uninstall --save-dev nodemon
# Ver información de un paquete
npm info express
npm info express version # Solo la última versión
# Ver paquetes desactualizados
npm outdated
# Auditoría de seguridad
npm audit
npm audit fixScripts en package.json
Los scripts son comandos que puedes ejecutar con npm run <nombre>:
json
{
"scripts": {
"start": "node src/index.js",
"dev": "nodemon src/index.js",
"build": "tsc",
"test": "jest",
"lint": "eslint src/"
}
}bash
npm start # Ejecuta el script "start"
npm run dev # Ejecuta "dev"
npm test # Alias de npm run test
npm run lintEl archivo package-lock.json
Cuando instalas paquetes, NPM crea (o actualiza) package-lock.json. Este archivo:
- Registra las versiones exactas de cada paquete instalado
- Garantiza instalaciones reproducibles en cualquier máquina
- Debe commitearse en control de versiones
bash
# Instalar exactamente lo que dice package-lock.json (ideal en CI/CD)
npm cinode_modules y .gitignore
La carpeta node_modules puede contener miles de archivos y pesar varios cientos de MB. Nunca la incluyas en Git:
gitignore
# .gitignore
node_modules/
.env
dist/Cualquier colaborador puede recrearla con npm install.
Ejemplo práctico
javascript
// index.js — usando paquetes instalados
import chalk from "chalk"; // npm install chalk
import { v4 as uuidv4 } from "uuid"; // npm install uuid
import dayjs from "dayjs"; // npm install dayjs
const id = uuidv4();
const fecha = dayjs().format("YYYY-MM-DD HH:mm");
console.log(chalk.green("✓ Proyecto iniciado"));
console.log(chalk.yellow(` ID: ${id}`));
console.log(chalk.blue(` Fecha: ${fecha}`));