El enganche de precompilation de Git falla en GitHub para Mac (funciona en command-line)

Creé un script de precompilation muy simple:

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

Cuando ejecuto git commit en la command-line (con Tests failed. Aborting.. ), obtengo la salida 1 esperada con el post Tests failed. Aborting.. Tests failed. Aborting..

Sin embargo, si uso GitHub para Mac, sin embargo, obtengo:

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

Supongo que se npm a que npm no está disponible para el entorno de ejecución que usa GitHub para Mac, pero he estado tratando de resolver cómo solucionarlo.

Resuelto. Como los modules de nodo instalados globalmente terminan en /usr/local/bin , simplemente necesitaba agregar lo siguiente al comienzo de mi precompromiso:

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

es decir, agregar ambos /usr/local/bin y /usr/local/sbin a PATH en el punto de ejecución.

La variable $ PATH que está disponible en entornos de GUI como Github Desktop y Sourcetree es diferente de la disponible en el terminal. Por defecto, $ PATH disponible en los entornos de la GUI no puede encontrar los modules de su nodo. Como se indicó en la respuesta anterior, puede asegurarse de que / usr / local / bin esté en la ruta agregando

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

En mi caso, esto no funcionó porque estoy usando Node Version Manager , que almacena diferentes versiones de Node y facilita la actualización y el cambio de versiones de Node. Almacena tus node_modules para cada versión de Node en un file separado. Aquí está el código que utilicé para resolver este 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 

Esto busca NVM, y si existe, lo carga y lo usa para encontrar la ruta a los modules de nodo para la versión de Nodo actualmente utilizada. Si solo está intentando acceder a los modules de nodo y no necesita acceder a nada especial, puede omitir la adición de la carpeta sbin , por ejemplo /usr/local/sbin