2012-10-14 29 views
19

我创建了一个非常简单的预提交脚本: -Git的pre-commit钩子在GitHub上没有为Mac(适用于命令行)

#!/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上的Mac,但是我得到:

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

我猜其打倒在不被提供到GitHub上为Mac使用的执行环境npm,但我一直把我的头发撕掉试图找出如何解决这个问题。

回答

22

已解决。作为全球安装节点模块/usr/local/bin下结束了我只是需要添加以下在我的预提交开头:

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

即在执行点追加两个/usr/local/bin/usr/local/sbinPATH

1

GUI环境(如Github Desktop和Sourcetree)中可用的$ PATH变量与终端中可用的$ PATH变量不同。默认情况下,GUI环境中可用的$ PATH无法找到您的节点模块。正如在前面的回答指出,可以确保在/ usr/local/bin目录是在路径中加入

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

在我来说,这并没有工作,因为我使用Node Version Manager,存储不同版本的节点并且可以轻松升级和切换节点版本。它将每个版本的Node的node_modules存储在一个单独的文件中。下面是我用来解决这个问题的代码:

#!/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 

此检查NVM,如果它存在,它加载并使用它来寻找路径为节点的当前使用的版本的节点模块。如果您只尝试访问节点模块并且不需要特别注意,可以跳过sbin folder(例如, /usr/local/sbin

+0

“您可以通过添加” - 通过添加位置来确保/ usr/local/bin位于路径中? – sompylasar

+0

@sompylasar在pre-commit脚本中,我发布了这个例子。我修改了问题中的脚本,并将其发布在我的答案中。它根据nvm是否可用来修改PATH – RustyToms

相关问题