fnm vs nvm: gerenciadores de versão do Node para CI
O fnm é um gerenciador de versões do Node rápido e baseado em Rust; o nvm é o original baseado em shell que quase todos já usaram.
Ambos instalam e alternam versões do Node.js e leem um arquivo de versão do projeto. O fnm é um binário compilado que inicia rápido e lê .node-version ou .nvmrc; o nvm é um script Bash universal, mas lento de carregar em um shell.
| fnm | nvm | |
|---|---|---|
| Implementação | Binário Rust | Script Bash |
| Sobrecarga na inicialização do shell | Baixa | Perceptível (carrega o script) |
| Arquivo de versão | .node-version / .nvmrc | .nvmrc |
| Troca automática ao cd | Sim (com hook de shell) | Via configuração extra |
| Onipresença | Crescendo | Muito amplamente documentado |
Onde o fnm ganha
Como um binário único, o fnm instala de forma limpa em CI e adiciona pouca sobrecarga na inicialização do shell, o que importa quando muitos steps geram shells. Ele lê tanto .node-version quanto .nvmrc, então se encaixa em repositórios existentes. A troca automática na mudança de diretório é suave com o hook de shell.
Onde o nvm ganha
O nvm é a opção mais documentada e é o que a maioria dos guias e onboardings pressupõe. Para máquinas de desenvolvimento locais onde a velocidade de inicialização não é crítica, sua onipresença e familiaridade são vantagens reais. Muitos times já têm memória muscular de nvm.
Em CI
No GitHub Actions, o caminho mais simples geralmente é actions/setup-node lendo o .nvmrc, sem gerenciador de versão. Recorra ao fnm ou nvm quando precisar de troca na hora, no meio de um job; o fnm é a escolha mais enxuta para a velocidade do pipeline.
O veredito
Escolha o fnm por velocidade e uma instalação limpa de binário único, especialmente em CI ou para shells rápidos; escolha o nvm por máxima familiaridade em máquinas locais. Para a maioria dos pipelines, o setup-node com um arquivo de versão evita a necessidade de qualquer um.