====== 05 - Node y npm ======
**Node** ejecuta **JavaScript** (tema 04) fuera del navegador: en servidores, en herramientas de línea de comandos y en la compilación del proyecto. **npm** es su gestor de paquetes: descarga dependencias y define los comandos de ejecución y compilación, con un papel análogo al de **Maven** en Java.
node --version
node src/main.js # ejecuta un archivo
node # REPL interactivo para probar fragmentos
===== 1. npm: dependencias del proyecto =====
npm init -y # crea package.json con valores por omisión
npm install typescript # añade una dependencia al proyecto
npm install --save-dev typescript # ... que solo se usa al compilar o probar
El ''package.json'' declara el proyecto y sus comandos:
{
"name": "importador-libros",
"version": "1.0.0",
"scripts": {
"build": "tsc",
"start": "node dist/main.js"
},
"devDependencies": {
"typescript": "^5.7.0"
}
}
^ Sección ^ Contiene ^
| ''scripts'' | comandos del proyecto; se ejecutan con ''npm run build'' |
| ''dependencies'' | paquetes que la aplicación necesita en ejecución |
| ''devDependencies'' | herramientas de compilación y pruebas, como TypeScript |
* ''npm start'' es la abreviatura de ''npm run start''.
* ''npx'' ejecuta una herramienta instalada en el proyecto sin crear un script: ''npx tsc --version''.
===== 2. node_modules y package-lock.json =====
* ''npm install'' descarga los paquetes en ''node_modules/''. Esa carpeta se **regenera** con otro ''npm install'': no se sube al repositorio.
# .gitignore
node_modules/
dist/
.env
* ''package-lock.json'' guarda la versión exacta de cada paquete instalado y **sí** se sube al repositorio: todo el equipo y el sistema de CI instalan lo mismo.
===== 3. Estructura del proyecto =====
importador-libros/
├── src/ # código fuente
│ └── main.js
├── dist/ # resultado de la compilación (tema 06)
├── node_modules/
├── package.json
├── package-lock.json
└── .gitignore
// src/main.js
console.log("Biblioteca lista");
El objeto ''process'' expone las **variables de entorno** definidas en el ''.env'' (tema 03): ''process.env.PORT''.
Al pasar a **TypeScript** (tema 06) el código fuente de ''src/'' cambia a extensión ''.ts'' y el compilado queda en ''dist/'': la estructura del proyecto no cambia.
Al clonar un repositorio con ''package.json'', el primer paso siempre es ''npm install'': ''node_modules'' no viaja con el código, y sin él faltan todas las herramientas del proyecto.