- Principais critérios de comparação: multiplataforma, configuração inicial, fonte das versões do Node, uso no dia a dia
Node Version Manager (NVM)
- Com 75,2k estrelas no GitHub, é a solução mais popular para gerenciamento de versões do Node
- Surgiu cedo e conquistou grande popularidade na comunidade
- Não oferece suporte completo ao Windows, mas funciona em GitBash, Cygwin, WSL etc.
- Existe um pacote separado para Windows, o nvm-windows, mas ele não é o próprio NVM
- Suporta apenas shells POSIX (
bash, zsh), deixando de fora usuários de Fish e outros
- A instalação pode ser feita com um comando simples
- Consegue entender qual versão do Node.js usar por meio do arquivo
.nvmrc
- O comando
nvm use define a versão do Node.js apenas no shell atual, então a versão continua a mesma mesmo ao sair da pasta do projeto
- Há o ônus de sempre precisar saber qual é a versão do Node.js no shell atual e qual versão o projeto exige
- É melhor do que gerenciar manualmente todas as versões do Node.js, mas ainda está longe de uma integração perfeita
N
- Gerenciador de versões do Node.js popular, com 18,5k estrelas no GitHub
- Não é multiplataforma e tem ainda mais limitações do que o NVM
- Não funciona no shell nativo do Windows, no Git for Windows Bash nem na Cygwin DLL
- Pode ser instalado diretamente via NPM ou Brew, ou baixando e executando um script
sh
- Consegue detectar diretamente a versão do Node na seção
"engines" do package.json
- Ainda há o problema de precisar acompanhar manualmente qual versão exata do Node.js usar em cada projeto
- Ele gerencia uma versão “global” do Node.js, então mesmo após fechar o shell, permanece a versão do Node usada no último projeto
Fast Node Manager (FNM)
- Gerenciador de versões do Node escrito em Rust, com 15,2k estrelas no GitHub
- É o primeiro gerenciador de versões do Node realmente multiplataforma da lista
- Funciona no Windows sem exigir a instalação de outros pacotes
- O processo de instalação é claro e intuitivo
- Gerencia a versão do Node.js por shell e usa uma versão “padrão” quando o projeto não especifica uma versão
- Tem recurso de troca automática de versão do Node.js com base na pasta, mas precisa de configuração
- Para a troca automática funcionar corretamente, é preciso instalar antes as versões necessárias do Node.js
- Só consegue detectar a versão do Node a partir dos arquivos
.node-version ou .nvmrc
Volta
- Com 10k estrelas no GitHub, é uma estrela em ascensão no mundo dos gerenciadores de versão
- É escrito em Rust e é multiplataforma
- O processo de instalação é fluido em sistemas baseados em Unix
- Não requer arquivos adicionais ao definir a versão do Node.js
- Lê a configuração diretamente do
package.json
- A seção
"engines" fica logo ao lado da configuração do Volta, facilitando a sincronização das versões
- Também permite gerenciar o toolchain, alternando dinamicamente não só a versão do Node.js, mas também a versão do Yarn
- Sempre que um comando de instalação é executado, garante que as versões de Node.js e Yarn correspondam ao que foi declarado
PNPM
- Embora seja visto como uma alternativa ao NPM ou ao Yarn, também consegue gerenciar versões do Node.js
- É multiplataforma e oferece a mesma experiência de gerenciamento de versões do Node.js em todas as plataformas
- Como o gerenciamento de versão do Node não é seu recurso principal, é difícil usá-lo junto com NPM ou Yarn
- O Node.js instalado pelo PNPM não inclui o Corepack
- Só consegue gerenciar versões do Node.js de forma global, sem configuração por shell
- Não alterna dinamicamente a versão do Node.js ao mudar de projeto, então é preciso acompanhar isso manualmente
Conclusão
- Os gerenciadores de versão do Node.js evoluíram bastante ao longo do tempo
- O NVM foi a solução mais antiga e popular, e continua sendo
- Mas o ecossistema está evoluindo, e várias ferramentas como N, FNM e Volta surgiram
- No momento, o Volta parece ser o gerenciador de versões do Node.js mais completo e rico em recursos
- O Volta é multiplataforma, oferece uma experiência fluida no uso diário e ainda gerencia outras ferramentas usadas no projeto
4 comentários
Achei trabalhoso ter que aprender a gerenciar isso separadamente como pacote, então estou simplesmente usando
brew unlink && brew link node@14.Há coisas demais, então a vontade de aprender isso a sério é meio fraca
Lembrando de quando eu ficava fuçando executáveis para Windows no antigo FileForge, dá até a impressão de que, mesmo sendo prático, será que pode ser tão prático assim.
Para mim, o que espero de um gerenciador de versões não é tanto desempenho, mas sim versatilidade. Nesse sentido, tenho usado o https://github.com/asdf-vm/asdf com bastante satisfação. Dependendo do plugin, dá para gerenciar não só Node, mas também Python, Ruby, Golang etc. Também uso bastante o plugin do direnv.
O Nodenv também é uma alternativa bastante boa, então é uma pena que não tenha sido mencionado. Como tem 2,2 mil stars no GitHub, parece que foi excluído por não ser considerado muito conhecido.
Por ser baseado em script de shell, a compatibilidade com Windows é fraca, assim como no NVM e no N. Em compensação, além da versão global do Node.js, ele também permite definir versões do Node.js por pasta e até abrir um novo ambiente de shell usando uma versão específica do Node.js.