项目接入 eslint 检查,通过 husky 结合 lint-staged 来处理,命令行才做 commit 提交,是正常的,但 SourceTree 可视化工具无法使用了,报错如下:
这是 node、husky 命令都没找到。
$ which node
/Users/admin/.volta/bin/node
运行 which node, 这里有点奇怪,我的 node 是 nvm 安装的,这路径不对。
ls -al /Users/admin/.volta/bin
total 32856
drwxr-xr-x 9 admin staff 288 6 27 14:09 .
drwxr-xr-x 9 admin staff 288 6 27 14:09 ..
lrwxr-xr-x 1 admin staff 34 6 27 14:09 node -> /Users/admin/.volta/bin/volta-shim
lrwxr-xr-x 1 admin staff 34 6 27 14:09 npm -> /Users/admin/.volta/bin/volta-shim
lrwxr-xr-x 1 admin staff 34 6 27 14:09 npx -> /Users/admin/.volta/bin/volta-shim
-rwxr-xr-x 1 admin staff 6522504 6 2 08:14 volta
-rwxr-xr-x 1 admin staff 4771376 6 2 08:14 volta-migrate
-rwxr-xr-x@ 1 admin staff 5522480 6 2 08:14 volta-shim
lrwxr-xr-x 1 admin staff 34 6 27 14:09 yarn -> /Users/admin/.volta/bin/volta-shim
删除 /Users/admin/.volta 后,再次查询,返回了对应 nvm 路径下的 node
$ which node
/Users/admin/.nvm/versions/node/v16.16.0/bin/node
接下来我们让 SourceTree 能在 PATH 中找到 node, 我们使用的 nvm,pre-commit 添加如下代码
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
node -v
npx lint-staged -- --color
接下来再操作 SourceTree 提交 commit,
前面命令找不到的问题被修复了,现在报 pre-commit 执行被退出了
我们通过测试验证,确实是 pre-commit 中调用的 lint-staged 格式校验未通过,导致pre-commit hooks 失败。
这里有点小问题,我记得 lint-staged 执行失败,退出码是 1,而不是 3
至此:SourceTree 中找不到 node 的问题得到处理,但lint-staged 的错误消息被吞掉了,钩子执行失败的原因这里不展示。
测试完成后,看下吗的 stackoverflow 中的解答,貌似无意间操作 sourceTree 配置,解决了“当前目录不是 git 目录的问题”
继续看 SourceTree 吞掉 lint-staged 报错提示信息的问题
这里找到一篇参考:https://juejin.cn/post/7027013488132227079,有处理 commit-msg 错误提示被吞掉的问题,仅能参考,实际问题还不是同一个。
husky - pre-commit hook exited with code 3 (error)
这里有个 ISSUE: https://github.com/typicode/husky/issues/1176
参考: