一、commitlint
1. commitlint的由来
虽然已经使用commitizen的 git cz 来代替了 git commit 实现了规范化的提交诉求,但是依然存在着有人 会忘记使用的问题,这样的提交是应该被阻止提交的。 从这我们就可以知道:commitlint 用于检查提交信息
2. git hooks
相关概念参考官网
重点
Git Hook 调用时机 说明 pre-commit git commit
执行前
它不接受任何参数,并且在获取提交日志消息并进行提交之前被调用。脚本git commit
以非零状态退出会导致命令在创建提交之前中止。可以用 git commit --no-verify
绕过commit-msg git commit
执行前
可用于将消息规范化为某种项目标准格式。
还可用于在检查消息文件后拒绝提交。可以用 git commit --no-verify
绕过简单的来说:
commit-msg
:可以用来规范化标准格式,并且可以按需指定是否要拒绝本次提交。pre-commit
:会在提交前被调用,并且可以按需指定是否要拒绝本次提交。
3. commitlint 的安装 【需要**npm
需要在 7.x 以上版本 或者 node 版本 v16 以上**】
安装依赖
shellnpm install --save-dev @commitlint/config-conventional@12.1.4 @commitlint/cli@12.1.4
创建
commitlint.config.js
文件shellecho "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js
打开
commitlint.config.js
, 增加配置项( config-conventional 默认配置点击可查看 ):javascriptmodule.exports = { // 继承的规则 extends: ['@commitlint/config-conventional'], // 定义规则类型 rules: { // type 类型定义,表示 git 提交的 type 必须在以下类型范围内 'type-enum': [ 2, // 在什么情况下验证 'always', // 泛型内容 [ 'feat', // 新功能 feature 'fix', // 修复 bug 'docs', // 文档注释 'style', // 代码格式(不影响代码运行的变动) 'refactor', // 重构(既不增加新功能,也不是修复bug) 'perf', // 性能优化 'test', // 增加测试 'chore', // 构建过程或辅助工具的变动 'revert', // 回退 'build' // 打包 ] ], // subject 大小写不做校验 'subject-case': [0] } }
注意:确保保存为
UTF-8
的编码格式**,否则可能会出现以下错误:SyntaxError: Invalid or unexpected token自定义 rules
javascriptmodule.exports = { // 继承的规则 extends: ['@commitlint/config-conventional'], // 定义规则类型 rules: { 'custom-rules': [2, 'always'], // subject 大小写不做校验 'subject-case': [0], }, plugins: [ { rules: { 'custom-rules': ({ subject }) => { const prefix = '#'; return [subject.includes(prefix), '必须包含#'] } } } ] }
4. husky 的安装 【需要**npm
需要在 7.x 以上版本 或者 node 版本 v16 以上**】
安装依赖:
shellnpm install husky@7.0.1 --save-dev
启动
hooks
, 生成.husky
文件夹shellnpx husky install
在
package.json
中生成prepare
指令( 需要 npm > 7.0 版本 )shellnpm set-script prepare "husky install"
执行
prepare
指令shellnpm run prepare
执行成功,提示
添加
commitlint
的hook
到husky
中,并指令在commit-msg
的hooks
下执行npx --no-install commitlint --edit "$1"
指令shellnpx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'
此时的
.husky
的文件结构至此,不符合规范的 commit 将不再可提交