Corepack vs nvm: fixando o tooling do Node comparado
Eles não são realmente concorrentes: o nvm fixa a versão do runtime Node.js, enquanto o Corepack fixa qual gerenciador de pacotes (e versão) o projeto usa. A maioria dos times usa os dois juntos.
Corepack e nvm são frequentemente mencionados juntos, mas resolvem problemas diferentes. O nvm (Node Version Manager) instala e alterna versões do Node.js em uma máquina. O Corepack vem com o Node.js e gerencia o gerenciador de pacotes: ele lê o campo packageManager do package.json e provisiona a versão exata do pnpm/Yarn. Saber qual usar evita confusão no CI.
| Corepack | nvm | |
|---|---|---|
| Fixa | Gerenciador de pacotes + versão | Versão do Node.js |
| Fonte da verdade | packageManager no package.json | .nvmrc ou comando |
| Vem com o Node | Sim (embutido) | Não (instale separadamente) |
| Escopo | pnpm, Yarn (npm também) | O próprio runtime do Node |
| Uso típico no CI | corepack enable | nvm install / setup-node |
| Substitui | Instalar manualmente pnpm/Yarn | Node do sistema, pacotes do SO |
Eles se complementam, não competem
Use o nvm (ou seu passo de setup-node no CI) para obter a versão certa do Node.js e depois use o Corepack para obter a versão certa do gerenciador de pacotes. Definir "packageManager": "pnpm@9.x" mais corepack enable garante que cada desenvolvedor e runner use o mesmo pnpm, o que evita churn de lockfile por drift de versão.
No CI
No GitHub Actions, o actions/setup-node cuida da versão do Node (cobrindo as necessidades no estilo nvm) e suporta cache. Habilitar o Corepack (corepack enable) então torna o gerenciador de pacotes fixado disponível sem um passo de instalação manual, de modo que o CI corresponde exatamente ao local. Esse pareamento remove os descompassos de "funciona na minha máquina" causados por versões diferentes de pnpm/Yarn.
Ressalvas honestas
O Corepack governa apenas o gerenciador de pacotes, não o Node em si, então não pode substituir o nvm/setup-node. O Corepack teve mudanças de release e de assinatura entre versões do Node, então fixe-o e teste. O nvm é baseado em shell e mais lento para alternar do que algumas alternativas (fnm, mise), mas é o mais documentado.
O veredito
Não escolha um em detrimento do outro. Use o nvm ou o setup-node para a versão do Node.js e o Corepack para a versão do gerenciador de pacotes. Juntos, eles tornam os toolchains do Node reproduzíveis entre máquinas e o CI.