Committing fails in Git hooks pre-commit because the node command wasn't found

James picture James · Feb 13, 2019 · Viewed 16.1k times · Source

I generated a JHipster app with Angular and Java, inside of a repository that I had previously made. I then generated some JDL classes with it and the build was successful, but when I tried to commit my changes in GitHub, it threw the following error:

Commit failed - exit code 1 received, with output: '.git/hooks/pre-commit: line 32: node: command not found'

I looked inside of my pre-commit file:

#!/bin/sh
# husky

# Hook created by Husky
#   Version: 1.3.1
#   At: 2/13/2019, 12:10:11 PM
#   See: https://github.com/typicode/husky#readme

# From npm package
#   Name: husky
#   Directory: undefined
#   Homepage: https://github.com/typicode/husky#readme

scriptPath="JHipsterProject/node_modules/husky/run.js"
hookName=`basename "$0"`
gitParams="$*"

debug() {
  [ "${HUSKY_DEBUG}" = "true" ] && echo "husky:debug $1"
}

debug "$hookName hook started..."

if [ -f "$scriptPath" ]; then
  # if [ -t 1 ]; then
  #   exec < /dev/tty
  # fi
  if [ -f ~/.huskyrc ]; then
    debug "source ~/.huskyrc"
    source ~/.huskyrc
  fi
  node "$scriptPath" $hookName "$gitParams"
else
  echo "Can't find Husky, skipping $hookName hook"
  echo "You can reinstall it using 'npm install husky --save-dev' or delete this hook"
fi

The error was in line 32:

node "$scriptPath" $hookName "$gitParams"

I'm not familiar with pre-commit files or how they work, but I currently have v10.15.0for Node.js, and 1.8.0_201 for my Java JDK and JRE. The version of JHipster I'm using is 5.8.1.

Is there anything I should change in this file, including line 32 in order to get rid of the error in my commit?

I'm also using the Visual Studio Code IDE if that helps at all.

Thanks in advance.

Answer

Vladimir Salin picture Vladimir Salin · Oct 24, 2019

As @Stephen Savitzky suggested, it might be Node installation problem. However, if you're able to

  1. Run application normally without an issue, and also
  2. See no issues when doing git commits from terminal

Then, it's probably Node sourcing problem since the paths to it might be different from terminals or from GUI apps like VSC.

Your setup seems to be using husky for pre-commit hooks, so to ensure you have the right Node version, you could add ~/.huskyrc as suggested in the docs:

# ~/.huskyrc
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

Then, you can source Node from NVM (if you use one) or another source. It's also a good way to debug what's actually going on when husky hook scripts kick in.