1.效果
3. 在项目中如何添加
3.1 安装(只提供npm安装方式)全局安装 commitizen
npm i -D commitlint @commitlint/config-conventional commitizen cz-git
3.2 配置模版
在项目的根目录下配置添加文件 commitlint.config.js 并写入如下代码
/** @type {import('cz-git').UserConfig} */
// eslint-disable-next-line no-undef
module.exports = {extends: ['@commitlint/config-conventional'],rules: {// @see: https://commitlint.js.org/#/reference-rules// 'header-max-length': [0, 'always', 72],// type 类型定义,表示 git 提交的 type 必须在以下类型范围内'type-enum': [2,'always',['feat', // 新功能开发'fix', // Bug修复'refactor', // 重构(refactoring production code)'style', // 代码排版格式修改,比如行尾添加分号等'docs', // 文档修改'build', // 构建流程或依赖管理等修复'ci', // ci相关的修改'test', // 测试用例补充、修改或重构'perf', // 性能优化'revert', // 回滚'chore', // 杂务,对外部用户不可见的工具、配置等的修改,如修改.gitignore]]},prompt: {messages: {type: '请选择提交类型:',scope: '本次提交的影响范围 (可选):',customScope: '本次提交的影响范围:',subject: '请简要描述提交(必填):',body: '请输入详细变更 (可选). 使用 "|" 换行:\n',breaking: '本次提交列出破坏性改动 (可选). 使用 "|" 换行:\n',footerPrefixsSelect: '本次提交修复的issue (可选):',customFooterPrefixs: '请输入issue前缀:',footer: '本次提交修复的issue. 例如.: #31, #34:\n',confirmCommit: '确认使用以上信息提交?(y/n)'},types: [{ value: 'feat', name: 'feat:新功能开发', emoji: ':sparkles:' },{ value: 'fix', name: 'fix:Bug修复', emoji: ':bug:' },{value: 'refactor',name: 'refactor:重构(refactoring production code)',emoji: ':recycle:'},{ value: 'style', name: 'style:代码排版格式修改,比如行尾添加分号等', emoji: ':lipstick:' },{ value: 'docs', name: 'docs:文档修改', emoji: ':memo:' },{value: 'build',name: 'build:构建流程或依赖管理等修复',emoji: ':package:'},{ value: 'ci', name: 'ci:ci相关的修改', emoji: ':ferris_wheel:' },{value: 'test',name: 'test:测试用例补充、修改或重构',emoji: ':white_check_mark:'},{ value: 'perf', name: 'perf:性能优化', emoji: ':zap:' },{ value: 'revert', name: 'revert:回滚', emoji: ':rewind:' },{ value: 'chore', name: 'chore:杂务,对外部用户不可见的工具、配置等的修改,如修改.gitignore', emoji: ':hammer:' },],useEmoji: true,emojiAlign: 'center',themeColorCode: '',scopes: [],allowCustomScopes: true,allowEmptyScopes: true,customScopesAlign: 'bottom',customScopesAlias: 'custom',emptyScopesAlias: 'empty',upperCaseSubject: false,markBreakingChangeMode: false,allowBreakingChanges: ['feat', 'fix'],breaklineNumber: 100,breaklineChar: '|',skipQuestions: ['scope', 'customScope', 'body', 'breaking', 'footer', 'footerPrefix', 'customFooterPrefixs'],issuePrefixs: [{ value: 'closed', name: 'closed: ISSUES has been processed' }],customIssuePrefixsAlign: 'top',emptyIssuePrefixsAlias: 'skip',customIssuePrefixsAlias: 'custom',allowCustomIssuePrefixs: true,allowEmptyIssuePrefixs: true,confirmColorize: true,maxHeaderLength: Infinity,maxSubjectLength: Infinity,minSubjectLength: 0,scopeOverrides: undefined,defaultBody: '',defaultIssues: '',defaultScope: '',defaultSubject: ''}
};
3.3 修改packjson
文件
script同级
"config": {"commitizen": {"path": "node_modules/cz-git"}}
3.4 使用方式
在每次 git add filename
之后使用 git cz
就会提示 commit的规范
3.5 commit的校验规则
此时还不并不能自动校验commit
的规则,需要进行如下操作才行,本操作需要使用node 14以上的版本,在 node 14以下会出现如下问题:
internal/process/esm_loader.js:74internalBinding('errors').triggerUncaughtException(^Error [ERR_UNKNOWN_BUILTIN_MODULE]: No such built-in module: node:timers/promisesat Loader.builtinStrategy (internal/modules/esm/translators.js:285:11)at new ModuleJob (internal/modules/esm/module_job.js:59:26)at Loader.getModuleJob (internal/modules/esm/loader.js:257:11)at async ModuleWrap.<anonymous> (internal/modules/esm/module_job.js:74:21)at async Promise.all (index 1)at async link (internal/modules/esm/module_job.js:79:9) {code: 'ERR_UNKNOWN_BUILTIN_MODULE'
}
4.解决方案来自于Support Node 14 #428,建议使用高版本的node
1. 添加挂钩
安装husky
|
2. node v16中初始化 husky
-
在
packjason.json
的scripts
中添加
初始化husky
|
- 添加
commit-msg
检测方法
添加commitlint (windows中添加方式可能不一样)
|
此时不符合规范的提示就是
commitlint不通过
|
作为替代方案,您可以在内部创建一个脚本package.json
另一种添加commitlint方式
|
3. node v20中初始化 husky
-
在
packjason.json
的scripts
中添加
初始化husky
|
-
删除默认自带的
pre-commit
文件,文件里面是有个npm test
,pre-commit
文件可以做一些前置校验,如eslint、pretty、ts的校验等, 文件路径是.husky/pre-commit
-
添加
commit-msg
检测方法
commit校验规则
|
作为替代方案,您可以在内部创建一个脚本package.json
添加commitlint
|
此时不符合规范的提示就是
commitlint校验不通过提示
|
4. 测试钩子函数在每次 git commit
的时候,会自动检测commit中的内容是否含有以上的关键词,如果没有则会提示
需用使用者直接修改commit之后再提交,虽然可以人为的去在commit中使用以上关键词,但是不建议这样使用,为了保持大家格式统一,要求使用git cz代替git commit。
在每次 git commit
的时候,会自动检测commit中的内容是否含有以上的关键词,如果没有则会提示
校验不通过的提示
|