isN*_*247 21 git github github-for-mac atlassian-sourcetree
我创建了一个非常简单的预提交脚本: -
#!/usr/bin/env sh
# Run tests
npm test
if [ $? -ne 0 ]; then
echo "Tests failed. Aborting.."
exit 1
fi
exit 0
Run Code Online (Sandbox Code Playgroud)
当我git commit在命令行运行时(测试失败),我得到了预期的退出1和消息Tests failed. Aborting...
但是,如果我使用GitHub for Mac,我得到:
.git/hooks/pre-commit: line 5: npm: command not found
Tests failed. Aborting..
(256)
Run Code Online (Sandbox Code Playgroud)
我猜测它npm不适用于GitHub for Mac正在使用的执行环境,但我一直在试图弄清楚如何解决这个问题.
isN*_*247 25
解决.由于全局安装的节点模块最终/usr/local/bin需要在我的预提交开始时添加以下内容:
PATH=$PATH:/usr/local/bin:/usr/local/sbin
Run Code Online (Sandbox Code Playgroud)
即既追加/usr/local/bin和/usr/local/sbin以PATH在执行点.
在GUI环境(如Github Desktop和Sourcetree)中可用的$ PATH变量与终端中可用的变量不同。默认情况下,GUI环境中可用的$ PATH找不到您的节点模块。如上一个答案所述,您可以通过添加以下命令来确保/ usr / local / bin在路径中
PATH=$PATH:/usr/local/bin:/usr/local/sbin
Run Code Online (Sandbox Code Playgroud)
在我的情况下,这不起作用,因为我使用的是Node Version Manager,它存储Node的不同版本,并易于升级和切换Node版本。它将每个版本的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
Run Code Online (Sandbox Code Playgroud)
这将检查NVM,如果存在NVM,则将其加载并使用它为当前使用的Node版本查找到节点模块的路径。如果您只是尝试访问节点模块并且不需要任何特殊操作,则可以跳过添加sbin文件夹的操作,例如/usr/local/sbin
| 归档时间: |
|
| 查看次数: |
10697 次 |
| 最近记录: |