新版Husky Hooks在Linux系统运行异常,代码提交时报错如何解决?
问题原因
- 钩子逻辑归属错误:你将本应放在pre-commit钩子的代码校验逻辑写在了commit-msg钩子文件中,commit-msg钩子的核心作用是校验提交信息格式,你修改后丢失了原有的commitlint调用逻辑,同时代码校验的触发时机也不符合预期。
- husky默认生成的pre-commit钩子未修改:husky-init初始化后会默认生成一个pre-commit钩子,内置
npm test命令,如果你项目的package.json中没有配置test脚本,就会触发执行失败。 - 缺少commitlint必要配置:你初始化时添加了commitlint的commit-msg钩子,但如果未安装commitlint相关依赖、未添加commitlint配置文件,也会触发执行报错。
- 钩子文件无执行权限:Ubuntu系统下如果生成的husky钩子文件缺少可执行权限,会直接导致钩子运行失败。
解决方案
- 修正commit-msg钩子内容,恢复commitlint校验逻辑,文件路径
.husky/commit-msg:
#!/bin/sh . "$(dirname "$0")/_/husky.sh" npx --no-install commitlint --edit "$1"
- 新建或修改pre-commit钩子文件,将代码校验逻辑放到对应的钩子中,文件路径
.husky/pre-commit:
#!/bin/sh . "$(dirname "$0")/_/husky.sh" echo "HOOK PRE-COMMIT" yarn lint-check yarn prettier-check
- 检查package.json的scripts配置,确保存在对应的命令,示例配置参考:
{ "scripts": { "lint-check": "eslint . --ext .js,.jsx,.ts,.tsx", "prettier-check": "prettier --check ." } }
- 安装commitlint必要依赖并添加配置文件:
执行安装命令:yarn add @commitlint/cli @commitlint/config-conventional -D
项目根目录新建commitlint.config.js,内容参考:
module.exports = { extends: ['@commitlint/config-conventional'] }
- 给所有husky钩子添加可执行权限,避免Ubuntu下权限不足:
chmod +x .husky/*
内容的提问来源于stack exchange,提问作者THIAGO DE BONIS
相关产品推荐
相关产品推荐

