Github Desktop使用husky prehook提交卡住 命令行运行正常问题求助
问题排查解决步骤
1. 优先排查测试命令的交互模式问题
这是最高发的原因:多数前端测试框架(如Jest、Vitest)默认在终端环境执行时如果检测到是非CI环境,会开启watch监听模式,等待用户输入指令,而Github Desktop的钩子执行上下文没有交互输入能力,就会无限卡住。
解决方案:修改pre-commit里的测试执行命令,关闭watch模式,示例:
#!/bin/sh . "$(dirname "$0")/_/husky.sh" cd dashboard # Jest 场景 npm run test -- --watchAll=false # Vitest 场景 npm run test -- --run
2. 修正Node/npm的环境变量配置
你之前添加的PATH="/usr/local/bin:$PATH"只覆盖了全局安装的Node路径,如果你是通过NVM、FNM等版本管理工具安装的Node,对应的可执行文件路径不在该目录下,就会出现找不到npm命令的问题导致脚本卡住。
解决方案:
- 先在正常执行的CLI中执行
which npm,获取npm的完整路径,例如输出为/Users/yourname/.nvm/versions/node/v18.19.0/bin/npm - 在pre-commit脚本中要么直接使用完整路径执行npm命令,要么将对应Node版本的bin目录加入PATH:
#!/bin/sh # 替换为你自己的Node bin目录路径 export PATH="/Users/yourname/.nvm/versions/node/v18.19.0/bin:$PATH" . "$(dirname "$0")/_/husky.sh" cd dashboard npm run test
3. 校验Husky钩子路径配置
因为你的.git目录和package.json不在同一层级,需要确认Git的钩子路径配置正确:
- 在CLI项目根目录执行
git config core.hooksPath,确认输出为dashboard/.husky - 如果输出不符,执行以下命令修正:
git config core.hooksPath dashboard/.husky
4. 开启脚本调试定位卡点
如果以上方案都未解决,可在pre-commit脚本开头添加调试参数,打印执行日志定位卡点:
#!/bin/sh # 开启执行日志打印 set -x # 遇到错误直接退出,避免无限挂住 set -e . "$(dirname "$0")/_/husky.sh" cd dashboard npm run test
修改后在Github Desktop触发提交,卡住后可在Github Desktop的日志目录查看钩子执行的完整日志,定位具体卡点:
- Mac路径:
~/Library/Application Support/GitHub Desktop/logs/ - Windows路径:
%APPDATA%\GitHub Desktop\logs\
内容的提问来源于stack exchange,提问作者Jaeeun Lee
相关产品推荐
相关产品推荐

