commitlint 配置了 type-enum 为啥还是能提交不符合规范的 commit?
我按照文档配了 commitlint 的 type-enum,只允许 feat、fix、docs 这几种类型,但 git commit 时写了个 typo: xxx 还是成功提交了,根本没报错。是不是哪里没生效?
我用的是 husky + commitlint 的组合,配置文件如下:
module.exports = {
extends: ['@commitlint/config-conventional'],
rules: {
'type-enum': [2, 'always', ['feat', 'fix', 'docs']]
}
};
检查一下你有没有执行这两步:
第一步,初始化 husky:
第二步,添加 commit-msg hook:
执行完第二步后,看看你的 .husky 目录下有没有 commit-msg 文件,内容大概是:
如果 hook 根本没建立,那 commitlint 根本不会被调用,你配置文件写得再对也没用。
另外提醒一下,如果你用的是 npm script 里手动调用 commitlint 除外,否则必须通过 husky 的 commit-msg hook 来拦截提交。
先检查你的 .husky 目录下有没有 commit-msg 文件,没有的话需要手动创建。husky v6 之后的版本配置方式变了,不再往 package.json 里写配置了。
在项目根目录执行这两步:
或者手动在 .husky 目录下新建 commit-msg 文件,内容如下:
别忘了给这个文件加上执行权限:
这样配置完,再试下 git commit,不合规的提交就会被拦截报错了。
另外吐槽一句,你的 rules 配置可以稍微优雅一点,把类型抽出来维护,后面加类型不用改两遍:
这样后面如果想加 scope-enum 或者其他规则复用这个类型列表也方便。