项目接入 eslint 检查,通过 husky 结合 lint-staged 来处理,命令行才做 commit 提交,是正常的,但 SourceTree 可视化工具无法使用了,报错如下:

    image.png
    这是 node、husky 命令都没找到。

    1. $ which node
    2. /Users/admin/.volta/bin/node

    运行 which node, 这里有点奇怪,我的 node 是 nvm 安装的,这路径不对。

    1. ls -al /Users/admin/.volta/bin
    2. total 32856
    3. drwxr-xr-x 9 admin staff 288 6 27 14:09 .
    4. drwxr-xr-x 9 admin staff 288 6 27 14:09 ..
    5. lrwxr-xr-x 1 admin staff 34 6 27 14:09 node -> /Users/admin/.volta/bin/volta-shim
    6. lrwxr-xr-x 1 admin staff 34 6 27 14:09 npm -> /Users/admin/.volta/bin/volta-shim
    7. lrwxr-xr-x 1 admin staff 34 6 27 14:09 npx -> /Users/admin/.volta/bin/volta-shim
    8. -rwxr-xr-x 1 admin staff 6522504 6 2 08:14 volta
    9. -rwxr-xr-x 1 admin staff 4771376 6 2 08:14 volta-migrate
    10. -rwxr-xr-x@ 1 admin staff 5522480 6 2 08:14 volta-shim
    11. lrwxr-xr-x 1 admin staff 34 6 27 14:09 yarn -> /Users/admin/.volta/bin/volta-shim

    删除 /Users/admin/.volta 后,再次查询,返回了对应 nvm 路径下的 node

    1. $ which node
    2. /Users/admin/.nvm/versions/node/v16.16.0/bin/node

    接下来我们让 SourceTree 能在 PATH 中找到 node, 我们使用的 nvm,pre-commit 添加如下代码

    1. #!/bin/sh
    2. . "$(dirname "$0")/_/husky.sh"
    3. export NVM_DIR="$HOME/.nvm"
    4. [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
    5. node -v
    6. npx lint-staged -- --color

    接下来再操作 SourceTree 提交 commit,
    image.png

    前面命令找不到的问题被修复了,现在报 pre-commit 执行被退出了
    我们通过测试验证,确实是 pre-commit 中调用的 lint-staged 格式校验未通过,导致pre-commit hooks 失败。
    image.png
    这里有点小问题,我记得 lint-staged 执行失败,退出码是 1,而不是 3

    至此:SourceTree 中找不到 node 的问题得到处理,但lint-staged 的错误消息被吞掉了,钩子执行失败的原因这里不展示。
    测试完成后,看下吗的 stackoverflow 中的解答,貌似无意间操作 sourceTree 配置,解决了“当前目录不是 git 目录的问题”
    image.png

    继续看 SourceTree 吞掉 lint-staged 报错提示信息的问题
    这里找到一篇参考:https://juejin.cn/post/7027013488132227079,有处理 commit-msg 错误提示被吞掉的问题,仅能参考,实际问题还不是同一个。

    1. husky - pre-commit hook exited with code 3 (error)

    这里有个 ISSUE: https://github.com/typicode/husky/issues/1176

    参考: