22

我创建了一个非常简单的预提交脚本:-

#!/usr/bin/env sh

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

exit 0

当我git commit在命令行运行时(测试失败),我得到了预期的 exit 1 和 message Tests failed. Aborting..

但是,如果我使用 GitHub for Mac 但是我会得到:

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

我猜这归结为npmGitHub for Mac 正在使用的执行环境不可用,但我一直在努力解决这个问题。

4

4 回答 4

28

解决。由于全局安装的节点模块最终/usr/local/bin位于我的预提交开头,我只需要添加以下内容:

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

即在执行时同时附加/usr/local/bin和。/usr/local/sbinPATH

于 2012-10-14T14:31:03.370 回答
7

在 Github Desktop 和 Sourcetree 等 GUI 环境中可用的 $PATH 变量与终端中可用的变量不同。默认情况下,GUI 环境中可用的 $PATH 找不到您的节点模块。如上一个答案所述,您可以通过添加来确保 /usr/local/bin 在路径中

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

就我而言,这不起作用,因为我使用的是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

这将检查 NVM,如果存在,则加载它并使用它来查找当前使用的 Node 版本的节点模块的路径。如果您只是尝试访问节点模块并且不需要获取任何特殊内容,则可以跳过添加sbin 文件夹,例如/usr/local/sbin

于 2017-04-12T13:45:21.333 回答
0

对我来说,我没有安装从预提交调用的依赖项。就我而言,这是composer,所以brew install composer帮助了我。

your-project-directory/.git/hooks/pre-commit对于未来的窥视,通过在您最喜欢的文本编辑器中打开并根据需要安装缺少的依赖项,检查您是否缺少在预提交文件中调用的任何依赖项。

于 2019-06-11T13:45:55.633 回答
0

我通过运行解决了它:

sudo launchctl config user path "$(brew --prefix)/bin:${PATH}"

.huskyrc并在主文件夹~(而不是项目文件夹)中创建一个包含以下内容的文件:

# This loads nvm.sh and sets the correct PATH before running hook
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

我按照赫斯基常见问题解答中的这些说明进行操作。

于 2022-02-27T22:03:49.587 回答