Conceptos básicos de las bibliotecas esenciales
10 ejemplos de cómo seleccionamos, fijamos y retiramos las dependencias de npm en backends de Node.js 24 TypeScript, 7 básicos y 3 intermedios.
Busca en todas las páginas de la documentación
10 ejemplos de cómo seleccionamos, fijamos y retiramos las dependencias de npm en backends de Node.js 24 TypeScript, 7 básicos y 3 intermedios.
Inicia nuevos servicios con este conjunto seleccionado antes de evaluar alternativas.
| Preocupación | Predeterminado | Cuándo reconsiderar |
|---|---|---|
| Validación | zod | Rutas Fastify solo con JSON Schema sin tipos compartidos |
| Registro | pino | El proveedor de la nube exige otro formato (raro) |
| Cliente HTTP | got o axios | Llamadas salientes simples con fetch integrado |
| Fechas/zonas horarias | Luxon | Matemáticas de fechas puras sin zonas IANA |
| Cola + caché | BullMQ + ioredis | Tiendas AWS solo con SQS sin Redis |
CONTRIBUTING.md para que las PR no vuelvan a debatir los conceptos básicos semanalmente.Relacionado: Mejores prácticas de las bibliotecas esenciales - lista de verificación de selección
Puntúa a los candidatos antes de npm install.
## Evaluación de dependencia: <package-name>
- [ ] Última publicación < 12 meses O mantenedor LTS explícito
- [ ] Problemas abiertos respondidos en ~2 semanas para informes de seguridad
- [ ] Descargas semanales estables o en crecimiento (no un pico abandonado)
- [ ] Tipos de TypeScript integrados o calidad verificada por DefinitelyTyped
- [ ] No hay scripts de instalación a menos que se revisen (riesgo de cadena de suministro)
- [ ] Recuento transitivo aceptable (npm ls <pkg> --all)
- [ ] Licencia compatible (MIT/Apache-2.0 típico)npm audit después de la instalación; bloquea la alta gravedad sin un ticket de excepción.package.json expresa la intención; el lockfile expresa la realidad.
{
"dependencies": {
"zod": "^3.24.0",
"pino": "^9.0.0",
"ioredis": "^5.4.0"
},
"engines": {
"node": "24.18.0"
}
}npm install # actualiza el lockfile localmente con la intención
npm ci # CI instala el lockfile exacto - nunca se desvíaRelacionado: Lockfiles e instalaciones reproducibles
Node 24 reduce la superficie de terceros para tareas comunes.
// fetch integrado - no se requiere got/axios para GET simples
const res = await fetch("https://api.example.com/health");
const body = await res.json();
// Ejecutor de pruebas integrado - no se requiere jest para servicios pequeños
import { test } from "node:test";
import assert from "node:assert/strict";
test("health shape", () => {
assert.equal(typeof body.status, "string");
});node:test.npm ci más rápido.Relacionado: Conceptos básicos de las API integradas
Las bibliotecas de fechas o clientes HTTP duplicados crean un comportamiento inconsistente e imágenes infladas.
# Audita la superposición antes de aprobar una PR
npm ls moment date-fns luxon dayjs 2>/dev/null
npm ls axios got undici node-fetch 2>/dev/null| Superposición incorrecta | Solución |
|---|---|
moment + luxon | Elige Luxon para zonas IANA; elimina moment |
axios + got | Estandariza por servicio; SDK interno compartido si es necesario |
winston + pino | Solo Pino para servicios JSON |
Vincula las dependencias inusuales a un registro de decisiones.
{
"dependencies": {
"bullmq": "^5.0.0",
"ioredis": "^5.4.0"
}
}<!-- docs/adr/003-job-queue.md -->
# ADR 003: BullMQ para trabajos asíncronos
- Estado: aceptado
- Contexto: Necesidad de trabajos retrasados, reintentos, DLQ con Redis ya en la pila
- Decisión: BullMQ sobre listas de Redis sin procesar
- Consecuencias: Operar Redis HA; monitorear la profundidad de la coladocs/adr/ y están vinculados desde las descripciones de las PR.Trata las nuevas dependencias como un riesgo de producción, no como una conveniencia.
npm audit --audit-level=high
npx socket npm audit # opcional: escaneo proactivo de la cadena de suministro# .github/workflows/pr-checks.yml (extracto)
- run: npm ci
- run: npm audit --audit-level=highpostinstall en las diferencias del lockfile; se ejecutan en cada portátil de desarrollador.Relacionado: Cadena de suministro: npm audit & Socket
Elimina las dependencias con un plan de migración, no con una eliminación masiva.
## Plan de retiro: winston → pino
Semana 1: ADR aceptado; no hay nuevas importaciones de winston (regla de lint)
Semana 2-3: Migrar servicios de alto tráfico; registro dual si es necesario
Semana 4: Eliminar winston de package.json; npm audit confirma que se ha ido// Adaptador transitorio - eliminar después de la migración
import pino from "pino";
export const log = pino({ level: process.env.LOG_LEVEL ?? "info" });#backend con la lista de servicios afectados.Las bibliotecas compartidas fuerzan versiones transitivas consistentes.
{
"name": "@acme/shared-validation",
"dependencies": {
"zod": "^3.24.0"
},
"peerDependencies": {
"zod": "^3.24.0"
}
}@acme/shared-validation.zod en todos los archivos package.json semanalmente.npm run typecheck en la raíz del repositorio después de las actualizaciones agrupadas.Relacionado: Workspaces y Monorepos
Rechaza los paquetes que no cumplen con los estándares del equipo, incluso si son populares en npm.
| Rechazar cuando | Ejemplo | Alternativa |
|---|---|---|
| Sin mantenimiento 2+ años | ORM wrapper abandonado | Prisma, Drizzle, pg sin procesar |
| Sin ruta TypeScript | mega-lib sin tipado | alternativa tipada más delgada |
| Complemento nativo pesado para una función | lib de imágenes para redimensionar | servicio de plataforma o sharp con ADR |
| Duplica la capacidad de la plataforma | dotenv en producción solo con k8s | inyección de plataforma + Zod al inicio |
Versiones de la pila: Esta página fue escrita para Node.js 24.18.0 (LTS activa), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 y NestJS 11.
Revisado por Chris St. John·Última actualización: 16 jul 2026