Primeros pasos con Node.js
Node.js ejecuta JavaScript fuera del navegador. Comparte el lenguaje y varias Web APIs, pero incorpora acceso a archivos, procesos y red, y no incluye el DOM. Antes de usar Express conviene reconocer qué aporta el runtime por sí mismo.
Comprobar el entorno
Sección titulada «Comprobar el entorno»node --versionnpm --versionInstala una versión mantenida de Node y declara la versión esperada en el proyecto. npm es el gestor de paquetes que se distribuye con Node; pnpm y Yarn son alternativas, no runtimes distintos.
Crear y ejecutar un proyecto mínimo
Sección titulada «Crear y ejecutar un proyecto mínimo»mkdir node-labcd node-labnpm init -y{ "type": "module", "scripts": { "dev": "node --watch src/index.js", "start": "node src/index.js" }}const startedAt = new Date()console.log(`Proceso ${process.pid} iniciado en ${startedAt.toISOString()}`)npm run devnode --watch reinicia el proceso cuando cambian archivos. El script start representa una ejecución normal sin modo observación.
Qué ocurre al ejecutar el archivo
Sección titulada «Qué ocurre al ejecutar el archivo»shell inicia node → Node crea un proceso → resuelve e importa el módulo de entrada → ejecuta su código de nivel superior → mantiene vivo el event loop si quedan servidores, timers o I/O → termina cuando no queda trabajo o se solicita el cierreprocess.cwd() indica el directorio desde el que se ejecutó el comando. import.meta.url identifica el archivo actual. No son equivalentes y confundirlos rompe rutas al iniciar la aplicación desde otra carpeta.
console.log(process.cwd())console.log(import.meta.url)APIs globales y módulos nativos
Sección titulada «APIs globales y módulos nativos»Algunas capacidades son globales (fetch, URL, AbortController, Buffer, process). Otras se importan con el prefijo node:.
import { readFile } from "node:fs/promises"
const file = new URL("./config.json", import.meta.url)const config = JSON.parse(await readFile(file, "utf8"))El prefijo node: deja claro que fs/promises pertenece al runtime y no a node_modules.
Instalar una dependencia
Sección titulada «Instalar una dependencia»pnpm add zodpnpm add -D typescript @types/nodebun add zodbun add -d typescript @types/nodenpm install zodnpm install -D typescript @types/nodeUna dependencia de producción es necesaria cuando corre la aplicación. Una dependencia de desarrollo participa en tipos, tests, lint o build. El lockfile registra el árbol exacto instalado y debe versionarse.
Primer recorrido recomendado
Sección titulada «Primer recorrido recomendado»- package.json: scripts, dependencias y versión.
- CommonJS vs ES Modules: cómo se conectan archivos.
- Runtime y event loop: cuándo el proceso puede bloquearse.
- Errores asíncronos: cómo propagar, cancelar y cerrar.
- Filesystem, Buffer, HTTP, streams, eventos y procesos.
Comprobación rápida
Sección titulada «Comprobación rápida»Antes de seguir deberías poder explicar qué diferencia hay entre Node, npm y un framework; ejecutar un archivo; importar un módulo nativo; saber dónde corre el código y distinguir process.cwd() de la ubicación del módulo.