Noções Básicas de Bibliotecas Essenciais
10 exemplos de como selecionamos, fixamos e desativamos dependências npm em backends Node.js 24 TypeScript - 7 básicos e 3 intermediários.
Busque em todas as páginas da documentação
10 exemplos de como selecionamos, fixamos e desativamos dependências npm em backends Node.js 24 TypeScript - 7 básicos e 3 intermediários.
Comece novos serviços com este conjunto selecionado antes de avaliar alternativas.
| Preocupação | Padrão | Quando reconsiderar |
|---|---|---|
| Validação | zod | Rotas Fastify apenas com JSON Schema e sem tipos compartilhados |
| Logging | pino | Provedor de nuvem exige outro formato (raro) |
| Cliente HTTP | got ou axios | Chamadas de saída simples com fetch integrado |
| Datas/fuso horário | Luxon | Matemática de data pura sem zonas IANA |
| Fila + cache | BullMQ + ioredis | Lojas AWS apenas com SQS e sem Redis |
CONTRIBUTING.md para que os PRs não debatam os básicos semanalmente.Relacionado: Melhores Práticas de Bibliotecas Essenciais - checklist de seleção
Pontue candidatos antes de npm install.
## Avaliação de dependência: <nome-do-pacote>
- [ ] Última publicação < 12 meses OU mantenedor explícito de LTS
- [ ] Problemas abertos respondidos em ~2 semanas para relatórios de segurança
- [ ] Downloads semanais estáveis ou crescendo (não pico de abandono)
- [ ] Tipos TypeScript integrados ou qualidade DefinitelyTyped verificada
- [ ] Sem scripts de instalação, a menos que revisados (risco de cadeia de suprimentos)
- [ ] Contagem transitiva aceitável (npm ls <pkg> --all)
- [ ] Licença compatível (MIT/Apache-2.0 típico)npm audit após a instalação; bloqueie gravidade alta sem ticket de exceção.package.json expressa a intenção; o lockfile expressa a realidade.
{
"dependencies": {
"zod": "^3.24.0",
"pino": "^9.0.0",
"ioredis": "^5.4.0"
},
"engines": {
"node": "24.18.0"
}
}npm install # atualiza o lockfile localmente com a intenção
npm ci # CI instala o lockfile exato - nunca desvieRelacionado: Lockfiles e Instalações Reproduzíveis
Node 24 reduz a superfície de terceiros para tarefas comuns.
// fetch integrado - não precisa de got/axios para GET simples
const res = await fetch("https://api.example.com/health");
const body = await res.json();
// Test runner integrado - não precisa de jest para serviços pequenos
import { test } from "node:test";
import assert from "node:assert/strict";
test("formato de saúde", () => {
assert.equal(typeof body.status, "string");
});node:test.npm ci mais rápido.Relacionado: Noções Básicas de APIs Integradas
Bibliotecas de data ou clientes HTTP duplicados criam comportamento inconsistente e imagens inchadas.
# Audite sobreposição antes de aprovar um PR
npm ls moment date-fns luxon dayjs 2>/dev/null
npm ls axios got undici node-fetch 2>/dev/null| Má sobreposição | Correção |
|---|---|
moment + luxon | Escolha Luxon para zonas IANA; remova moment |
axios + got | Padronize por serviço; SDK interno compartilhado se necessário |
winston + pino | Apenas pino para serviços JSON |
Vincule dependências incomuns a um registro de decisão.
{
"dependencies": {
"bullmq": "^5.0.0",
"ioredis": "^5.4.0"
}
}<!-- docs/adr/003-job-queue.md -->
# ADR 003: BullMQ para jobs assíncronos
- Status: aceito
- Contexto: Necessidade de jobs atrasados, retentativas, DLQ com Redis já na pilha
- Decisão: BullMQ em vez de listas Redis brutas
- Consequências: Operar Redis HA; monitorar profundidade da filadocs/adr/ e são vinculados a partir das descrições de PR.Trate novas dependências como risco de produção, não conveniência.
npm audit --audit-level=high
npx socket npm audit # opcional: escaneamento proativo da cadeia de suprimentos# .github/workflows/pr-checks.yml (trecho)
- run: npm ci
- run: npm audit --audit-level=highpostinstall em diffs de lockfile - eles rodam em todos os laptops de desenvolvedor.Relacionado: Cadeia de Suprimentos: npm audit & Socket
Remova dependências com um plano de migração, não uma exclusão abrupta.
## Plano de desativação: winston → pino
Semana 1: ADR aceito; sem novas importações de winston (regra de lint)
Semana 2-3: Migrar serviços de alto tráfego; log duplo se necessário
Semana 4: Remover winston do package.json; npm audit confirma a remoção// Adaptador de transição - excluir após a migração
import pino from "pino";
export const log = pino({ level: process.env.LOG_LEVEL ?? "info" });#backend com a lista de serviços afetados.Bibliotecas compartilhadas forçam versões transitivas consistentes.
{
"name": "@acme/shared-validation",
"dependencies": {
"zod": "^3.24.0"
},
"peerDependencies": {
"zod": "^3.24.0"
}
}@acme/shared-validation.zod em todos os arquivos package.json semanalmente.npm run typecheck na raiz do repositório após atualizações agrupadas.Relacionado: Workspaces & Monorepos
Recuse pacotes que falham no padrão da equipe, mesmo que sejam populares no npm.
| Rejeitar quando | Exemplo | Alternativa |
|---|---|---|
| Não mantido há 2+ anos | Wrapper ORM abandonado | Prisma, Drizzle, pg bruto |
| Sem caminho TypeScript | Mega-lib sem tipos | Alternativa mais fina com tipos |
| Adicionador nativo pesado para uma função | Lib de imagem para redimensionamento | Serviço de plataforma ou sharp com ADR |
| Duplica capacidade da plataforma | dotenv em k8s-only prod | Injeção de plataforma + Zod na inicialização |
Versões da Pilha: Esta página foi escrita para Node.js 24.18.0 (Active LTS), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 e NestJS 11.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026