Volver a Documentación
Node.js

Node.js

v20.x LTS

Runtime 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