- Published on
Git Hooks 与 Node 环境问题
- Authors
- Name
- Cassian Florin
- @ynyng90660098
Git Hooks 与 Node 环境问题
🧠起因
我在之前解决了 Git Hooks与多JDK环境问题解决 的这个问题。但在今天又出现了本地node环境🪝钩子读不到了。真的是命运多舛。
如果您还没有阅读过 JDK 环境问题的解决方案,建议先查看 Git Hooks与多JDK环境问题解决 这篇文章,了解如何使用 SDKMAN 管理 Java 环境。
Git Hook 环境错误
npx: command not found
错误代码: 127
PATH: node_modules/.bin:/opt/homebrew/opt/git/libexec/git-core:/usr/bin:/bin:/usr/sbin:/sbin
- 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 node
让git hook
读取不到 我后面说明的都是如何解决这个问题
这个问题与之前解决的 JDK 环境问题 类似,都是由于环境管理工具导致的 PATH 配置问题。不同的是,这次我们需要管理 Node.js 环境而不是 Java 环境。
卸载 Node
使用 brew uninstall node 卸载当前环境
安装 NVM
安装 Node Version Manager 进行版本管理
安装 Node
使用 NVM 安装指定版本的 Node.js
卸载node
brew uninstall node
npm uninstall npm -g
node -v\nnpm -v
至此完成在 brew 下安装的 node 环境卸载。下面开始安装 nvm
安装 nvm
什么是 nvm 还请自行谷歌
我们使用 nvm 作者在 GitHub 上给出的指令。 GitHub:https://github.com/nvm-sh/nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
nvm -v
nvm ls-remote
nvm install v22.16.0
OK了。能跑到这说明你已经完成了。接下来正常使用就行。
📝 总结
通过这次问题的解决,我总结出了一些关于开发环境管理的重要经验:
🔄 环境管理工具的选择
- 避免使用 Homebrew 安装开发语言环境:虽然 Homebrew 安装方便,但会导致路径不一致,影响 Git hooks 的正常工作
- 推荐使用版本管理工具:
- Java 环境:使用 SDKMAN 进行管理
- Node.js 环境:使用 NVM 进行管理
- Python 环境:使用 pyenv 进行管理
🔗 相关文章
- Git Hooks与多JDK环境问题解决 - 解决 Java 环境问题
- SDKMAN 安装与配置指南 - SDKMAN 的详细安装教程
💡 最佳实践
- 统一环境管理:在团队中统一使用相同的环境管理工具
- 项目配置:在项目中添加相应的配置文件(如
.sdkmanrc
、.nvmrc
) - 文档记录:将环境配置步骤记录在项目文档中,方便团队成员快速搭建环境
这样,无论是 Java 还是 Node.js 环境问题,都能得到妥善解决,确保 Git hooks 能够正常工作。