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.