Atualizar automaticamente $ PATH com node_modules / .bin adequado

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/.binao meu $PATHnem sempre o corta, já que frequentemente me encontro em um subdiretório do meu projeto.

O npm bincomando produzirá o caminho absoluto para o node_modules/.binpesquisando PWD e diretórios pai por package.jsone node_modules:

~/projects/foo $ npm bin
/home/namuol/projects/foo/node_modules/.bin

Isso é útil, mas é tedioso digitar algo como $(npm bin)/expressexecutar o executável correto.

Mas com o poder do PROMPT_COMMAND, existe uma solução elegante!

Se você deseja que seja $PATHatualizado 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-modee node-mode-off, respectivamente.