Freqüentemente, não gosto de instalar executáveis NPM globalmente (ou seja, com npm install -g
), pois isso pode levar a dependências incompatíveis (ou seja, posso exigir o expresso 3.x em um projeto, mas 2.x em outro) e confusão geral.
O NPM é inteligente o suficiente para garantir que o pacote correto seja instalado, mas ele o instala localmente (como deveria) e simplesmente adicionar ./node_modules/.bin
ao meu $PATH
nem sempre o corta, já que frequentemente me encontro em um subdiretório do meu projeto.
O npm bin
comando produzirá o caminho absoluto para o node_modules/.bin
pesquisando PWD e diretórios pai por package.json
e node_modules
:
~/projects/foo $ npm bin
/home/namuol/projects/foo/node_modules/.bin
Isso é útil, mas é tedioso digitar algo como $(npm bin)/express
executar o executável correto.
Mas com o poder do PROMPT_COMMAND
, existe uma solução elegante!
Se você deseja que seja $PATH
atualizado automaticamente com base em seu diretório de trabalho atual, adicione isso ao final de seu .bashrc
-equivalente (e depois de qualquer coisa que defina $PATH
):
__OLD_PATH=$PATH
function updatePATHForNPM() {
export PATH=$(npm bin):$__OLD_PATH
}
function node-mode() {
PROMPT_COMMAND=updatePATHForNPM
}
function node-mode-off() {
unset PROMPT_COMMAND
PATH=$__OLD_PATH
}
# node-mode # Uncomment to enable node-mode by default
Isso pode adicionar um pequeno atraso toda vez que o prompt do bash for renderizado (dependendo do tamanho do seu projeto, provavelmente), então ele está desabilitado por padrão.
Você pode habilitá-lo e desabilitá-lo em seu terminal executando node-mode
e node-mode-off
, respectivamente.