当使用commitizen进行代码提交时,commitizen会提示你在提交代码时填写所必填的提交字段信息内容。
1、全局安装commitizen
npm install -g commitizen@4.2.4
2、安装并配置 cz-customizeable 插件
2.1 使用 npm 下载 cz-customizeable
npm i cz-customizeable@6.3.0 --save-dev
2.2 在package.json中添加配置
"config":{"commitizen":{"path": "node_modules/cz-customizable"}
}
3、项目根目录下添加 .cz-config.js 文件
module.exports = {// 可选类型types: [{value: 'feat', name: 'feat: 新功能'},{value: 'fix', name: 'fix: 修复'},{value: 'docs', name: 'docs: 文档变更'},{value: 'style', name: 'style: 代码格式(不影响代码运行的变动)'},{value: 'refactor',name: 'refactor: 重构(既不是增加feature,也不是修复bug)'},{value: 'perf', name: 'perf: 性能优化'},{value: 'test', name: 'test: 增加测试'},{value: 'chore', name: 'chore: 构建过程或辅助工具的变动'},{value: 'revert', name: 'revert: 回退'},{value: 'build', name: 'build: 打包'}],// 步骤messages: {type: '请选择提交的类型:',customScope: '请输入修改的范围(可选)',subject: '请简要描述提交内容(必填)',body: '请输入详细描述(可选)',footer: '请输入要关闭的issue(可选)',confirmCommit: '确认要使用以上信息提交? (y/n)'},// 跳过步骤skipQuestions: ['body', 'footer'],// 默认长度为 72subjectLimit: 72
}
4、使用 git cz 代替 git commit
使用 git cz 代替 git commit,即可看到提交的提示内容
5、git hooks
5.1 什么是git hooks
当提交的描述信息不符合约定式提交规范时,阻止当前的提交,并抛出对应的错误提示。而要实现这个目的,就需要使用git hooks(git的钩子函数或者是git的回调方法)
git hooks钩子函数非常多,其中用的比较多的,只有两个:
git hook | 调用时机 | 说明 |
pre-commit | git commit执行前它不接受任何参数,并且在获取提交日志消息并进行提交之前被调用。脚本git commit以非零状态退出会导致命令在创建提交之前终止。 | 可以用git commit --no-verify 绕过 |
commit-msg | git commit执行前可用于将消息规范化为某种项目标准格式。还可用于在检查消息文件后拒绝提交。 | 可以用git commit --no-verify 绕过 |
简单来说明这两个钩子:
1、commit-msg:可以用来规范化标准格式,并且可以按需指定是否要拒绝本次提交。
2、pre-commit:会在提交前被调用,并且可以按需指定是否要拒绝本次提交。
5.2 使用husky+commitlint检查提交描述
5.2.1 commitlint:用于检查提交信息
1、安装依赖
npm install --save-dev @commitlint/config-conventional@12.1.4 @commitlint/cli@12.1.4
2、创建 commitlint.config.js 文件
在项目根目录下创建commitlint.config.js文件,在改文件中添加以下配置
module.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的编码格式,否则可能会报错
5.2.2 husky:是git hooks工具
1、安装依赖
npm install husky@7.0.1 --save-dev
2、启动 hooks,生成 .husky 文件夹
npx husky install
3、在package.json中生成 prepare 指令
npm set-script prepare "husky install"
4、执行 prepare 指定
npm run prepare
5、执行成功
6、添加 commitlint 的 hook 到 husky 中,并在 commit-msg 的hooks 下执行以下指令
npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'
配置完成后,在使用git commit提交时,若不按规范提交,则直接报错并提示相关错误。
6、通过 pre-commit 提交时检测代码规范
通过 husky 监测 pre-commit 钩子,在该钩子下执行 npx eslint --ext | .js,.vue src指令来去进行相关检测,目的是防止git提交代码时,没有进行代码格式化,没进行eslint格式检查。
1、执行以下命令
npx husky add .husky/pre-commit "npx eslint --ext .js,.vue src"
2、使用lint-staged自动修复格式错误
之前已经通过pre-commit配置方式,使得git commit提交代码时,先对代码eslint格式化校验,校验通过后,才能进行提交,否则提示相关错误。但是这样会存在两个问题:
a) 当只修改个别文件时,没有必要检测所有的文件代码格式
b) 只会提示对应的错误,并不能自动修改,还需手动进行代码修改
lint-staged 只检查本次修改更新的代码,并在出现错误的时候,自动修复并进行推送。
lint-staged 无需单独安装,创建项目时,vue-cli 就已经帮助我们安装过了。只需修改以下配置文件即可。
在package.json文件中添加以下配置:
"lint-staged":{"src/**/*.{js,vue}":["eslint --fix","git add"]
}
3、修改 .husky/pre-commit 文件
将npx eslint --ext .js,.vue src 修改为 npx lint-staged
npx lint-staged