Como configurar corretamente os pacotes globais do node usando n e zsh
Eu sofri e encontrei uma solução pro tão famoso command not found após um npm i -g xpto
🚀
O Problema
Quando desenvolvemos com qualquer linguagem, é comum precisarmos alterar entre diferentes versões dela nos nossos projetos. No node, por exemplo, podemos estar em um projeto que requer a versão v8.9.4
e um outro que necessita da v11.9.0
. Muitas vezes buscamos uma ferramenta para nos ajudar a gerenciar issoe trocar facilmente de versão (um exemplo deste tipo de ferramenta, e a que vamos utilizar hoje é o n do TJ.).
Por causa dessas ferramentas, precisamos saber onde estamos instalando os nossos pacotes relativos àquela versão do node e também dizer ao nosso bash onde que é que ele pode encontrar os binários que ele vai precisar para executar aquele comando correspondente (já que esse path altera pra cada versão do node, afinal onde ele instala os globais? 🤔).
Depois de ler este tutorial você nunca mais terá problemas para executar/instalar qualquer pacote global na sua versão gerenciada do node (seja ela qual for) 😎.
A Solução
Primeiro precisamos pensar um pouco, se o zshrc é executado em cada sessão que iniciamos no terminal, é possível fazer com ele também detecte qual é o path atual dos nossos pacotes globais com o comando recomendado pelo próprio npm :).
Primeiro execute npm config --global get prefix
.
Isso deve resultar no print out do seu prefixo de binários globais do node, algo como /usr/local
.
Agora basta inserirmos isso no nosso ~/.zshrc
da seguinte maneira (eu geralmente adiciono logo no início das primeiras linhas após o comentário do bash):
# If you come from bash you might have to change your $PATH
export PATH=$PATH:$(npm config --global get prefix)/bin
🎊🎊🎊
Depois disso é só fazer o reload das suas configurações executando source ~/.zshrc
e já foi (basta executar o source caso vc n queira abrir e fechar um terminal, é uma forma de fazer um load instantâneo das suas configurações).
Nas próximas vezes que o seu terminal for aberto, o zsh utilizará o .zshrc para carregar as configs, e no momento de load fará a computação do valor de npm config --global get prefix
fazendo com que ele carregue corretamente e relativamente os globals.