目录
- 1. 修复 npx 路径问题(90% 的解决方案)
- 2. 显式加载环境变量(nvm 用户必选)
- 3. 修复全局 PATH 配置
- 4. 重装 Husky 与钩子
- 5. 使用 HUSKY_DEBUG 调试执行流程
🔧 核心解决方法(按优先级排序)
1. 修复 npx 路径问题(90% 的解决方案)
问题根源:
Husky 钩子脚本在非交互式 shell 中运行时未正确识别 npx
命令路径。
操作步骤:
# 查找当前 npx 实际路径
which npx
# 替换 pre-commit 文件中的 npx 为完整路径
sed -i '' 's/npx/\/Users\/username\/.nvm\/versions\/node\/v18.12.1\/bin\/npx/g' .husky/pre-commit
✅ 注意:
- 将路径替换为
which npx
的实际输出。- 若使用
nvm
,确保路径指向当前激活的 Node 版本。
2. 显式加载环境变量(nvm 用户必选)
原因说明:
Husky 在 Git 提交钩子中运行时不会自动加载 .bashrc
或 .zshrc
,因此需要手动加载 nvm.sh
。
修改后的 .husky/pre-commit
示例:
#!/usr/bin/env sh
# 加载 nvm 环境(关键步骤)
[ -s "$HOME/.nvm/nvm.sh" ] && \. "$HOME/.nvm/nvm.sh"
. "$(dirname -- "$0")/_/husky.sh"
# 执行 lint-staged 命令(使用绝对路径更可靠)
/Users/username/.nvm/versions/node/v18.12.1/bin/npx lint-staged
📌 建议:也可以将
npx lint-staged
替换为node_modules/.bin/lint-staged
来避免依赖npx
。
3. 修复全局 PATH 配置
适用场景:
VS Code 终端可能没有继承系统完整的 PATH
,导致找不到 npx
。
操作步骤:
# 编辑 ~/.zshrc 或 ~/.bashrc 文件
echo 'export PATH="$HOME/.nvm/versions/node/v18.12.1/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
💡 提示:如果使用了
asdf
或其他版本管理器,请相应地调整PATH
。
4. 重装 Husky 与钩子
适用情况:
当 .husky
目录或钩子文件损坏时,建议彻底重建。
操作命令:
# 删除旧配置
rm -rf .git/hooks .husky
# 初始化 Husky
npx husky-init
# 安装依赖并启用钩子
npm install
⚠️ 注意:重新初始化后需手动添加如
npx lint-staged
到.husky/pre-commit
文件中。
5. 使用 HUSKY_DEBUG 调试执行流程
目的:
查看 Husky 钩子执行时的具体行为,便于排查错误。
操作步骤:
# 开启调试模式
export HUSKY_DEBUG=1
# 再次尝试提交代码,观察日志输出
git commit -m "test"
🧪 输出内容可帮助你确认是否加载了正确的 Node 环境、是否调用了
lint-staged
等。
⚠️ 辅助验证步骤
-
检查文件权限:
chmod +x .husky/pre-commit
-
验证 Node 和 npm 版本:
node -v npm -v
推荐使用 Node ≥ v16,以确保支持
npx
。 -
测试 npx 是否可用:
npx lint-staged --version
💎 总结优先级
- ✅ 修正
npx
路径(直接解决命令缺失) - ✅ 显式加载
nvm
环境(解决 PATH 继承问题) - 🔁 重装 Husky(排除配置损坏)
- 🛠️ 调试执行流程(定位深层原因)
📌 相关链接
- Husky 官方文档
- lint-staged GitHub
- nvm 安装指南