如何在Husky中同时运行Commitlint与自定义命令?
解决方案:Husky同时配置Commitlint与自定义预提交脚本
核心逻辑梳理
Commitlint 是用来检查提交信息格式的工具,它的生效时机是commit-msg钩子(提交信息输入完成后、正式提交前),而非pre-commit钩子(提交前检查代码的阶段)。你之前的问题根源在于钩子绑定时机错误,或者配置细节缺失。
分步正确配置
1. 确保Commitlint依赖与配置文件齐全
先确认已安装必要依赖:
npm install --save-dev @commitlint/cli @commitlint/config-conventional
在项目根目录创建commitlint.config.js配置文件(以常规规范为例):
module.exports = { extends: ['@commitlint/config-conventional'] }
2. 配置Husky的两个钩子
pre-commit钩子(执行自定义脚本)
编辑.husky/pre-commit文件:#!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" npm run mycommand这个钩子负责执行你的自定义脚本,和之前的正确写法一致。
commit-msg钩子(执行Commitlint检查)
编辑.husky/commit-msg文件(注意给$1加双引号,避免提交信息含空格时出错):#!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" npx commitlint --edit "$1"
3. 确保钩子文件有可执行权限
如果钩子未生效,大概率是文件权限不足,执行以下命令:
chmod +x .husky/pre-commit .husky/commit-msg
验证配置
测试不符合规范的提交:
git commit -m "随便写个提交信息"
此时Commitlint会抛出错误,阻止提交;再测试符合规范的提交:
git commit -m "feat: 完成Husky与Commitlint的配置"
Commitlint会通过检查,同时自定义脚本mycommand也会正常执行。
之前方案的问题分析
- 方式一错误地将Commitlint放在
pre-commit钩子:这个阶段提交信息还未写入Git的COMMIT_EDITMSG文件,Commitlint无法读取有效内容,自然不会执行检查。 - 方式二如果未生效,可能是缺少Commitlint配置文件、钩子文件无执行权限,或者未给
$1加双引号导致参数传递异常。
内容的提问来源于stack exchange,提问作者afriedman111
相关产品推荐
相关产品推荐

