====== 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.