npm vs pnpm: qual gerenciador de pacotes Node para CI?
O pnpm troca o node_modules plano do npm por um store endereçado por conteúdo, e no CI isso normalmente significa installs mais rápidos e muito menos rotatividade de disco.
O npm é o gerenciador de pacotes padrão que vem com o Node. O pnpm usa um store global endereçável por conteúdo com hard links, o que acelera os installs, economiza disco e impõe uma resolução de dependências mais estrita.
| npm | pnpm | |
|---|---|---|
| Velocidade de install | Baseline | Mais rápido (store linkado) |
| Uso de disco | Cópia completa por projeto | Store compartilhado, hard links |
| Lockfile | package-lock.json | pnpm-lock.yaml |
| Install no CI | npm ci | pnpm install --frozen-lockfile |
| Suporte a monorepo | Workspaces (básico) | Workspaces (robusto) |
No CI
O pnpm instala mais rápido que o npm na maioria dos repos e corta o uso de disco através de seu store compartilhado, o que ajuda quando o cache ou o workspace é grande. Seu node_modules estrito e não plano também pega phantom dependencies que o npm permite silenciosamente. O npm continua sendo o padrão sem setup que toda imagem de CI e todo tutorial já assumem.
Faça cache do store
Chaveie seu cache de dependências no pnpm-lock.yaml (ou no package-lock.json para o npm) e faça cache do diretório do store do pnpm para o maior ganho de wall-clock. Qualquer um que você escolha roda igual nos runners de CI; runners gerenciados mais rápidos encurtam ainda mais a etapa de install.
O veredito
Quer installs mais rápidos, menos uso de disco e resolução mais estrita: pnpm. Quer o padrão universal sem setup: npm. De qualquer forma, faça commit do lockfile, use a flag de frozen install e faça cache do store.