2012-10-14 6 views
19

ho creato un semplice script di pre-commit: -Git pre-commit hook non riuscendo a GitHub for Mac (funziona su riga di comando)

#!/usr/bin/env sh 

# Run tests 
npm test 
if [ $? -ne 0 ]; then 
    echo "Tests failed. Aborting.." 
    exit 1 
fi 

exit 0 

quando ho eseguito git commit alla riga di comando (con test insufficienti), ottengo l'uscita 1 prevista con il messaggio Tests failed. Aborting...

Tuttavia, se uso GitHub for Mac però ottengo:

.git/hooks/pre-commit: line 5: npm: command not found 
Tests failed. Aborting.. 
(256) 

Sto indovinando la sua fino alla npm non essere a disposizione l'ambiente di esecuzione che GitHub for Mac sta usando, ma sono stato strappandomi i capelli cercando di capire come risolvere il problema.

risposta

22

risolto. Come moduli nodi installati globalmente finiscono sotto /usr/local/bin semplicemente bisogno di aggiungere quanto segue all'inizio del mio pre-commit:

PATH=$PATH:/usr/local/bin:/usr/local/sbin 

cioè aggiungendo sia /usr/local/bin e /usr/local/sbin a PATH al punto di esecuzione.

1

La variabile $ PATH disponibile in ambienti GUI come Github Desktop e Sourcetree è diversa da quella disponibile nel terminale. Per impostazione predefinita, $ PATH disponibile negli ambienti GUI non riesce a trovare i moduli del nodo. Come è stato affermato nella risposta precedente, è possibile garantire che/usr/local/bin sia nel percorso con l'aggiunta di

PATH=$PATH:/usr/local/bin:/usr/local/sbin 

Nel mio caso questo non ha funzionato perché sto usando Node Version Manager, che memorizza le diverse versioni di Node e semplifica l'aggiornamento e il passaggio delle versioni di Node. Memorizza i tuoi node_modules per ogni versione del nodo in un file separato. Ecco il codice che ho usato per aggirare questo problema:

#!/usr/bin/env bash 

PATH="/usr/local/bin:$PATH" 

if [ -f $HOME/.nvm/nvm.sh ] 
then 
    . $HOME/.nvm/nvm.sh 
    PATH="$HOME/.nvm/versions/node/$(nvm current)/bin:$PATH" 
fi 

Questo controlla per NVM, e se esiste, lo carica e lo utilizza per trovare il percorso ai moduli dei nodi per la versione attualmente utilizzata del Nodo. Se stai solo provando ad accedere ai moduli del nodo e non hai bisogno di ottenere nulla di speciale, puoi saltare aggiungendo lo sbin folder, ad es. /usr/local/sbin

+0

"è possibile garantire che/usr/local/bin si trovi nel percorso aggiungendo" - aggiungendo dove? – sompylasar

+0

@sompylasar nello script pre-commit, ho pubblicato l'esempio. Ho modificato la sceneggiatura nella domanda e l'ho pubblicata nella mia risposta. Modifica il PERCORSO in base alla disponibilità o meno di nvm – RustyToms