You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 16:15:42