我创建了一个非常简单的预提交脚本: -
#!/usr/bin/env sh
# Run tests
npm test
if [ $? -ne 0 ]; then
echo "Tests failed. Aborting.."
exit 1
fi
exit 0
当我在命令行运行git commit
时(测试失败),我得到了预期的退出1,消息为Tests failed. Aborting..
。
但是,如果我使用GitHub for Mac,我得到:
.git/hooks/pre-commit: line 5: npm: command not found
Tests failed. Aborting..
(256)
我猜测GitHub for Mac正在使用的执行环境无法使用npm
,但我一直在试图找出解决方法。
答案 0 :(得分:25)
解决。由于全局安装的节点模块最终位于/usr/local/bin
下,我只需在预提交开始时添加以下内容:
PATH=$PATH:/usr/local/bin:/usr/local/sbin
即。在执行时将/usr/local/bin
和/usr/local/sbin
附加到PATH
。
答案 1 :(得分:4)
Github Desktop和Sourcetree等GUI环境中可用的$ PATH变量与终端中可用的变量不同。默认情况下,GUI环境中可用的$ PATH无法找到您的节点模块。如前面的答案中所述,您可以通过添加
来确保/ usr / local / bin位于路径中List<Object>
在我的情况下,这不起作用,因为我使用的是Node Version Manager,它存储了不同版本的Node,并且可以轻松升级和切换Node版本。它将每个Node版本的node_modules存储在一个单独的文件中。这是我用来解决这个问题的代码:
PATH=$PATH:/usr/local/bin:/usr/local/sbin
这将检查NVM,如果存在,则加载它并使用它来查找当前使用的Node版本的节点模块的路径。如果您只是尝试访问节点模块而不需要获得任何特殊内容,则可以跳过添加sbin folder,例如#!/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
答案 2 :(得分:0)
对我来说,这是因为我没有安装从预提交中调用的依赖项。在我的情况下,这是composer
,因此brew install composer
帮助了我。
对于以后的窥视,请通过在您喜欢的文本编辑器中打开your-project-directory/.git/hooks/pre-commit
来检查是否缺少在预提交文件中调用的依赖项,并根据需要安装缺少的依赖项。