Quando lidamos com muito projetos sempre esbarramos em um projeto cuja a versão é diferente da que você está utilizando e muita das vezes é necessário instalar uma outra versão ou subir um container Docker, o que eu fiz por um bom tempo, em projetos node eu utilizava o nvm, eu sempre quis algo parecido para as demais linguagens e então apresento-vos o asdf.

Mas o que é esse asdf?

O asdf é um gerenciador de versões, digamos que você está utilizando um projeto com PHP 5.0 mas na sua máquina está instalada apenas a versão 7.4, como fazer? E se ainda tiver que executar projetos em ambas as versões? O asdf vem para resolver este problema, ele possibilita a instalação de ambas a versões de forma simples e ainda torna possível executar ambas ao mesmo tempo.

Instalando o asdf

Atualmente o asdf roda apenas em Linux e Mac, no Windows podemos utilizar com o WSL2.

Poderia escrever aqui todo os passo mas o site oficial já consta uma documentação bem detalhada com todos os passo para cada sistema operacional e terminal, basta clicar aqui para acessar.

Gerenciando as versões

O asdf pode gerenciar as versões em dois escopos, global, onde é alterado em todo o sistema e local onde altera apenas o diretório, lembrando que o escopo local tem preferência sobre o global.

Instalando plugins

O plugins são basicamente as linguagens, então se você que instalar o nodejs temos que instalar o plugin de nodejs, alguns plugins podem ter alguma dependência então é sempre bom verificar o repositório do plugin, por exemplo o PHP depende do pacote re2c.

O asdf possui uma variedade de plugins que você pode ver aqui.

Nesse exemplo iremos instalar o plugin do nodejs, no seu terminal digite:

asdf plugin add nodejs

Mas calma, se você foi com sede ao pote e tentou digitar node no seu terminal vai perceber que ele ainda não funciona, porque o plugin não instala a linguagem em si, ele basicamente dá ao asdf a habilidade de gerenciar o nodejs.

Instalando as linguagens

Agora com o plugin do nodejs instalado podemos então instalar a linguagem de fato.

É possível instalar versão especifica do node simplesmente digitando sua versão, digamos que queremos instar a versão 17.3.0 basta digitarmos:

asdf install nodejs 17.3.0

Ou, para instalar a ultima versão:

asdf install nodejs latest

E então, vamos assegurar que a última versão seja utilizada:

asdf global nodejs latest

Com isso temos node instalado e funcionando.

Escopo Local

No exemplo acima instalamos a última versão do node para todo o sistema, mas digamos que agora precisamos instalar o node 14.1.0 para um projeto especifico, com já temos o plugin do node instalado, basta então instalar a versão necessária:

asdf install nodejs 14.1.0

E então vamos na pasta do projeto e executamos:

asdf local nodejs 14.1.0

Podemos ver a diferença executando o comando node -v dentro da pasta e fora:

Note que ele cria um arquivo .tools-versions no diretório e se olharmos vermos que ele salvou nodejs 14.1.0 dentro do arquivo.

Instalando várias linguagem de uma vez

Para facilitar minha vida eu costumo utilizar o comando for, que apesar de ser um comando simples resolve muitas coisas de forma fácil.

Criamos um .txt contendo cada linguagem que vamos instalar, uma por linha, lembrando que é sempre bom verificar as dependências de cada plugin, as que irei utilizar neste exemplo, para facilitar, serão instalados sem problema.

Vamos criar o arquivo asdf-plugins.txt com:


cat <<EOT >> asdf-plugins.txt
nodejs
ruby
rust
EOT

Fique à vontade para alterar as linguagens, lembrando que aqui temos uma lista com todos os plugins.

E instalamos com:

for plugin in $(cat asdf-plugins.txt)
do
asdf  plugin add $plugin;
asdf install $plugin latest;
asdf global $plugin latest;
done;

Este for basicamente irá percorrer cada linha do arquivo asdf-plugins.txt e instalar e configurar cada linguagem em sua última versão, simples não?

Bom, com isso você já pode testar em várias linguagens e testar e automatizar de acordo com sua necessidades.