Skip to content

Git Hooks 与 Node 环境问题

在企业开发中可能会遇到项目中使用了 Git Hooks,其中有一个 git pre-commit 的 hook。本文就来说在要是用 git hooks 时我遇到的问题

Reading Time
6 min read
Updated
2026.09.16

In short

Git hook 报 npx: command not found,根因通常是 Homebrew 装的 Node 与 hook 拿到的 PATH 不一致。卸掉 brew 版 Node 改用 nvm 管理即可;Java 用 SDKMAN、Python 用 pyenv 是同一个道理。

Git Hooks 与 Node 环境问题

🧠起因

我在之前解决了 Git Hooks与多JDK环境问题解决 的这个问题。但在今天又出现了本地node环境🪝钩子读不到了。真的是命运多舛。

Error

exit 127

Git Hook 环境错误

npx: command not found
Path
node_modules/.bin:/opt/homebrew/opt/git/libexec/git-core:/usr/bin:/bin:/usr/sbin:/sbin
Notes
  • Git hook 无法读取到 node 环境
  • node_modules 文件夹中没有 npx 执行文件
  • PATH 环境变量配置问题

错误内容如下:

# 下面这一行是 sdkmanrc 的配置环境
-e Using java version 8.0.452-amzn in this shell.
# 这里开始是我的 node 环境问题
.husky/pre-commit: line 16: npx: command not found
husky - pre-commit script failed (code 127)
husky - command not found in PATH=node_modules/.bin:/opt/homebrew/opt/git/libexec/git-core:/usr/bin:/bin:/usr/sbin:/sbin

从上面的 shell 日志来看,git hook 是读不到我的 node 环境了。同时项目中使用npm install安装的node_modules文件夹里也没有npx的执行文件。

❌问题点

我的开发电脑是 MacBook Pro M1 Pro 版本的。第一次接触Mac系统的开发同学在拿到电脑安装自己的shell环境时我想会有部分同学和我一样使用Homebrew。 但是不得不说这个组建安装确实方便,只需要brew install xxx即可。但随之也会带来环境不匹配的问题。

Homebrew

问题环境
路径
/opt/homebrew/bin/
问题
环境不匹配,与生产环境差异过大
优点
  • 安装方便
  • 包管理统一
缺点
  • 路径与标准环境不同
  • 可能导致兼容性问题
  • Git hooks 无法正确识别

原生环境

推荐环境
路径
/usr/bin/
问题
生产环境标准
优点
  • 与生产环境一致
  • 兼容性好
  • Git hooks 正常工作
缺点
  • 需要手动管理版本
  • 安装相对复杂

在写这份文档之前我的 shell 环境用的都是 brew 就行安装的。 具体的问题就是 brew install 的内容是放在/opt/homebrew/bin/这个目录下面,与实际读取原生环境会有差别。 更多的Linux开发者与Unix开发者会使用/usr/bin、/usr/sbin/等这些目录获取需要使用的可执行文件,这与实际的生产环境相差过大。

🔧解决方案

既然我们清楚问题在哪了。那就开始着手解决吧! 我的问题是 brew install nodegit hook 读取不到 我后面说明的都是如何解决这个问题

  1. Completed: 卸载 Node

    使用 brew uninstall node 卸载当前环境

  2. Completed: 安装 NVM

    安装 Node Version Manager 进行版本管理

  3. Current: 安装 Node

    使用 NVM 安装指定版本的 Node.js

卸载node

卸载 Node.jsshell
brew uninstall node
卸载 npm(可选)shell
npm uninstall npm -g
验证卸载结果shell
node -v\nnpm -v

至此完成在 brew 下安装的 node 环境卸载。下面开始安装 nvm

安装 nvm

什么是 nvm 还请自行谷歌

我们使用 nvm 作者在 GitHub 上给出的指令。 GitHub:https://github.com/nvm-sh/nvm

安装 NVMshell
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
验证 NVM 安装shell
nvm -v
查看可用的 Node 版本shell
nvm ls-remote
安装指定版本的 Node.jsshell
nvm install v22.16.0

OK了。能跑到这说明你已经完成了。接下来正常使用就行。

📝 总结

通过这次问题的解决,我总结出了一些关于开发环境管理的重要经验:

🔄 环境管理工具的选择

  1. 避免使用 Homebrew 安装开发语言环境:虽然 Homebrew 安装方便,但会导致路径不一致,影响 Git hooks 的正常工作
  2. 推荐使用版本管理工具
    • Java 环境:使用 SDKMAN 进行管理
    • Node.js 环境:使用 NVM 进行管理
    • Python 环境:使用 pyenv 进行管理

🔗 相关文章

💡 最佳实践

  1. 统一环境管理:在团队中统一使用相同的环境管理工具
  2. 项目配置:在项目中添加相应的配置文件(如 .sdkmanrc.nvmrc
  3. 文档记录:将环境配置步骤记录在项目文档中,方便团队成员快速搭建环境

这样,无论是 Java 还是 Node.js 环境问题,都能得到妥善解决,确保 Git hooks 能够正常工作。

Keep reading

2025
  1. Git Hooks与多JDK环境问题解决

    Git · 开发习惯 · 解决方案

  2. 多环境下的 Git Config 配置

    Git · 开发习惯 · Open Source

  3. 今天成为了 MooTool 贡献者

    Contributors · GitHub · Tools