npm vs Yarn: qual gerenciador de pacotes Node para CI?
O Yarn empurrou o npm a melhorar, e hoje a diferença é menor do que era - mas o formato do lockfile, os workspaces e os hábitos do time ainda diferem.
O npm é o padrão que vem com o Node. O Yarn é um gerenciador de pacotes alternativo (Classic v1 e Berry v2+) historicamente conhecido por velocidade, installs determinísticos e workspaces robustos.
| npm | Yarn | |
|---|---|---|
| Empacotado com o Node | Sim | Não (instale separadamente) |
| Lockfile | package-lock.json | yarn.lock |
| Install no CI | npm ci | yarn install --immutable |
| Workspaces | Sim (básico) | Sim (maduro) |
| Recursos modernos | Melhorias constantes | PnP, zero-installs (Berry) |
No CI
O npm ci dá um install limpo e reprodutível a partir do package-lock.json sem nada extra para configurar. O Yarn oferece workspaces maduros e, no Berry, recursos avançados como Plug'n'Play e zero-installs que podem acelerar o CI. O desempenho é próximo para repos típicos; a escolha costuma ser mais sobre o lockfile existente e a familiaridade do time do que sobre velocidade bruta.
Escolhendo para pipelines
Greenfield ou querendo zero tooling extra: npm com npm ci. Precisa de workspaces maduros de monorepo ou recursos do Berry: Yarn. Faça commit do lockfile, use o comando de install determinístico e faça cache das dependências de qualquer forma.
O veredito
Quer o padrão empacotado, sem setup: npm. Quer workspaces maduros ou o PnP do Berry: Yarn. Para a maioria dos repos o desempenho é similar - deixe suas necessidades de lockfile e workspace decidirem.