Node.js e gerenciamento de versões com NVM

Carl Sagan, um dos astrofísicos mais conhecidos do mundo, tem uma frase famosa que diz:

"Se você deseja fazer uma torta de maçã do zero, você deve primeiro criar o universo."

Então, mesmo se você for no supermercado para comprar todos os ingredientes para fazer uma torta do zero, como açúcar, farinha, você ainda não vai estar fazendo ela do zero, porque você teria que, por conta própria, moer o trigo para fazer a farinha.

E mesmo nesse caso, você não estaria fazendo a farinha do zero, porque você teria que plantar o trigo. E mesmo se plantar, tá plantando em cima de um solo que já existe. Você teria que criar ele. Teria que criar também o sol, e assim por diante, até chegar na criação do universo, seja lá o que isso significar para você.

E a mesma coisa acontece ao desenvolver um software na nossa área. Nunca mais alguém vai fazer algo do zero, porque sempre vai estar usando algum módulo desenvolvido por outra pessoa ou criando algo em cima de um sistema base que foi criado por uma outra pessoa em algum outro momento. E isso é massa, porque é algo extremamente poderoso e habilita a gente a alcançar novos patamares do que é possível fazer com um único computador.

Node.js

Dito isso, a dependência mais importante de um projeto web fullstack em JavaScript (como o TabNews) é o Node.js.

O Node.js é uma ferramenta que vai nos permitir trabalhar com a linguagem JavaScript diretamente na nossa máquina, sem depender do navegador, que é o ambiente para o qual ela foi feita para rodar originalmente. Ele é o responsável por executar o código JavaScript no servidor da aplicação web.

NVM: gerenciando versões do Node.js

Como o Node.js recebe atualizações periodicamente, e é comum trabalharmos em projetos que utilizam diferentes versões dele, é importante ter uma ferramenta que facilite a instalação e o gerenciamento dessas versões.

E é aí que entra o NVM (Node Version Manager), que é um utilitário de linha de comando que permite instalar e alternar rapidamente entre diferentes versões do Node.js no seu ambiente de desenvolvimento. Ele pode ser instalado facilmente usando um comando disponível no repositório oficial do NVM no GitHub, e é compatível com sistemas operacionais como Windows (através do WSL), Linux e macOS.

Esse utilitário tem uma opção chamada ls, que é a abreviação de list, ou listar. E se a gente executar esse comando, o NVM retorna pra gente quais as versões atuais disponíveis do Node:

$ nvm ls
->      v23.6.0
default -> node (-> v23.6.0)
lts/* -> lts/krypton (-> N/A)
lts/krypton -> v24.14.1 (-> N/A)
lts/jod -> v22.16.0 (-> N/A)
...

Na hora de escolher qual versão instalar, procure sempre por uma versão LTS. LTS é a sigla para Long Term Support, ou suporte de longo prazo. E isso significa que os responsáveis por esse módulo se comprometem a dar um suporte mais estendido para esse tipo de versão e sempre deixar ela atualizada com patches de segurança, por exemplo. E no caso do Node.js, cada versão LTS tem um codinome, um apelido.

Para instalar uma versão LTS, basta executar o comando nvm install seguido do nome da versão, por exemplo:

$ nvm install lts/krypton
Downloading and installing node v24.14.1...
Now using node v24.14.1 (npm v11.4.2)

Agora, ao executar o comando node -v, será retornado a versão LTS que você acabou de instalar:

$ node -v
v24.14.1

E importante destacar que, quando se trata de LTS, não somente eles garantem um tempo mais estendido de suporte, como também eles garantem total compatibilidade entre uma subversão e outra.

Agora, um detalhe importante: se você reiniciar o seu ambiente de desenvolvimento ou simplesmente abrir um novo processo de terminal, ele vai ler as configurações padrão e pode voltar a disponibilizar uma versão diferente do Node.

E para mudar essa configuração padrão é bem fácil, nem precisa perguntar pra IA. Podemos usar o comando nvm --help para ler a documentação dele dentro do terminal mesmo:

$ nvm --help

Node Version Manager (v0.40.4)

Note: <version> refers to any version-like string nvm understands. This includes:
  - full or partial version numbers, starting with an optional "v" (0.10, v0.1.2, v1)
  - default (built-in) aliases: node, stable, unstable, iojs, system
  - custom aliases you define with \`nvm alias foo\`

 Any options that produce colorized output should respect the \`--no-colors\` option.

Usage:
  nvm --help                                  Show this message
    --no-colors                               Suppress colored output
  nvm --version                               Print out the installed version of nvm
  nvm install [<version>]                     Download and install a <version>. Uses .nvmrc if available and version is omitted.

  ...

E o que a gente tá procurando é o nvm alias default, que define uma versão padrão a ser usada no terminal.

A leitura do comando nvm alias default, pode não fazer sentido de início, mas a ideia é simples, porque alias significa apelido e default é um dos apelidos existentes no NVM.

Então, o comando nvm alias default tá falando sobre o apelido especial, default, o padrão aqui dentro do nosso terminal. E o comando espera a gente apontar o padrão para algum lugar, para uma versão do Node:

$ nvm alias default lts/krypton
default -> lts/krypton (-> v24.14.1)

Agora, mesmo se você fechar o seu terminal, ao abrir novamente, deixar tudo carregar e verificar a versão do Node.js, vai estar a que definimos como padrão.

O arquivo .nvmrc

Agora, quando mais pessoas entrarem no seu repositório para contribuir com o seu projeto, seria legal elas terem uma forma de saber qual que é a versão do Node.js que você recomenda usar. E tem um jeito muito fácil, que é através de um arquivo especial chamado .nvmrc.

Para criar ele, basta adicionar um arquivo chamado .nvmrc na raiz do seu repositório. E você vai encontrar vários arquivos especiais com esse final rc, como talvez o .bashrc, ou .vimrc, ou .npmrc. E o RC significa Run Commands. E foi uma convenção criada para scripts que possuem instruções de inicialização, assim como o nosso .nvmrc.

Então, dentro dele, você coloca a versão do Node.js que o projeto utiliza, por exemplo:

lts/krypton

Depois disso, basta digitar nvm install sem especificar nenhuma versão. E ele mostra que encontrou esse arquivo especial e vai usar a versão que tá lá dentro:

$ nvm install
Found '/projeto/.nvmrc' with version <lts/krypton>
Now using node v24.14.1 (npm v11.4.2)

E pronto, você não tem mais medo quando o assunto é versionamento do Node.js, pelo menos não no ambiente de desenvolvimento.

Então, matricule-se no curso.dev para praticar junto comigo e uma comunidade incrível, construindo um projeto real do zero, onde esse princípio de entender de verdade as coisas vai valer para tudo, principalmente sobre os temas que vão fazer brilhar os seus olhos, e você não vai se reconhecer quando perceber que consegue entender tudo de fora a fora.

Sentir-se competente em programação começa aqui.