Node.js
v20.x LTSRuntime JavaScript asíncrono de alto rendimiento
Descripción
Node.js es el runtime base de todos los servicios backend NestJS. Su event loop asíncrono maneja miles de conexiones concurrentes con mínimo consumo de memoria. Requerimos Node.js 20 LTS para acceso a fetch nativo y WebCrypto API.
Uso en WicSecure
Node.js 20 LTS es el runtime mínimo requerido. Las imágenes Docker usan node:20-alpine para reducir el tamaño. En producción los procesos NestJS corren con --max-old-space-size configurado según el límite de memoria del contenedor.
Configuración clave
typescriptconfig
# .nvmrc — versión de Node.js del proyecto
20.18.0
# Dockerfile base para servicios NestJS
FROM node:20-alpine AS base
WORKDIR /app
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
FROM base AS builder
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM base AS runner
COPY --from=builder --chown=appuser:appgroup /app/dist ./dist
COPY --from=builder --chown=appuser:appgroup /app/node_modules ./node_modules
USER appuser
CMD ["node", "--max-old-space-size=384", "dist/main.js"]Ejemplo de uso
typescript
// Ejemplo de Worker Thread para cómputo intensivo
import { Worker, isMainThread, parentPort } from 'worker_threads'
if (isMainThread) {
// Delegar cómputo intensivo a un worker para no bloquear el event loop
const worker = new Worker(__filename)
worker.on('message', (result) => console.log('Resultado:', result))
worker.postMessage({ data: largeDataset })
} else {
parentPort?.on('message', ({ data }) => {
const result = heavyComputation(data)
parentPort?.postMessage(result)
})
}Características clave
- Event loop: I/O asíncrono no bloqueante
- NPM: >2 millones de paquetes disponibles
- Streams para procesamiento de datos grandes
- Worker threads para paralelismo CPU-bound
- Fetch nativo, WebCrypto y Permissions API en v20