Erro acontecendo após um npm install global

Como configurar corretamente os pacotes globais do node usando n e zsh

Caio Alcantara
Training Center
Published in
2 min readMar 15, 2019

--

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.4e 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.

Erro resolvido e uma instalção sucedida de uma chamada com o fix no zshrc

--

--

Caio Alcantara
Training Center

Traveler, father of two cats, happily married, amateur chef ❤ Mobile First thinking. Let's build cool stuff!! — Senior Front End Engineer.