Conventional-Changelog/CommitLint 配置指南:从入门到精通
commitlint 项目地址: https://gitcode.com/gh_mirrors/co/commitlint
什么是CommitLint配置
CommitLint是一个用于规范化Git提交信息的工具,而配置则是其核心部分。通过合理的配置,开发团队可以统一提交信息的格式,提高代码库的可维护性。本文将全面解析CommitLint的各种配置方式及其应用场景。
配置文件方式
CommitLint支持多种配置文件格式,开发者可以根据项目需求选择最适合的一种:
支持的配置文件类型
-
专用配置文件(优先级最高):
.commitlintrc
(JSON格式).commitlintrc.json
.commitlintrc.yaml
或.commitlintrc.yml
.commitlintrc.js
或.commitlintrc.cjs
(CommonJS).commitlintrc.mjs
(ES模块).commitlintrc.ts
或.commitlintrc.cts
(TypeScript)
-
通用配置文件:
commitlint.config.js
或commitlint.config.cjs
commitlint.config.mjs
commitlint.config.ts
或commitlint.config.cts
配置文件要求
- 必须包含有效的JavaScript/TypeScript代码
- 必须导出一个配置对象
- 必须遵循特定的配置结构
在package.json中配置
对于希望减少项目根目录文件数量的团队,可以直接在package.json
中添加commitlint
字段进行配置:
{
"commitlint": {
"extends": ["@commitlint/config-conventional"],
"rules": {
"type-enum": [2, "always", ["feat", "fix", "docs"]]
}
}
}
命令行配置
在运行CommitLint时,可以通过--config
参数指定配置文件路径:
commitlint --config path/to/commitlint.config.js
配置对象详解
一个完整的CommitLint配置对象包含多个重要部分:
1. 基础配置
{
// 继承其他配置(可以是npm包或本地文件)
extends: ["@commitlint/config-conventional"],
// 指定解析器预设
parserPreset: "conventional-changelog-atom",
// 指定输出格式器
formatter: "@commitlint/format",
// 是否使用默认忽略规则
defaultIgnores: true
}
2. 规则配置
rules: {
// 规则配置格式:[严重级别, 适用条件, 值]
"type-enum": [2, "always", ["feat", "fix", "docs"]],
"scope-case": [2, "always", "lower-case"]
}
其中严重级别:
- 0: 禁用规则
- 1: 警告
- 2: 错误
3. 忽略特定提交
ignores: [
(commit) => commit.includes('WIP'), // 忽略包含WIP的提交
(commit) => commit.startsWith('Merge') // 忽略合并提交
]
4. TypeScript配置示例
对于TypeScript项目,可以使用类型化的配置:
import type { UserConfig } from "@commitlint/types";
import { RuleConfigSeverity } from "@commitlint/types";
const Configuration: UserConfig = {
extends: ["@commitlint/config-conventional"],
rules: {
"type-enum": [RuleConfigSeverity.Error, "always", ["feat", "fix"]]
}
};
export default Configuration;
共享配置
CommitLint支持配置继承,便于在多个项目中共享相同的配置规则:
1. 使用npm包
// commitlint.config.js
export default {
extends: [
'commitlint-config-myconfig', // 自动解析为commitlint-config-myconfig
'@scope/config' // 带作用域的包直接使用
]
}
2. 使用本地文件
// commitlint.config.js
export default {
extends: [
'./configs/base.js',
'./configs/types.js'
]
}
解析器预设
解析器预设决定了如何解析提交信息,可以自定义或使用现有预设:
1. 使用npm包
export default {
parserPreset: "conventional-changelog-atom"
}
2. 自定义解析器
// parser-preset.js
export default {
parserOpts: {
headerPattern: /^(\w*)(?:\(([\w$.\-*/ ]*)\))?: (.*)$/,
headerCorrespondence: ["type", "scope", "subject"]
}
}
最佳实践建议
- 项目初期:建议直接继承
@commitlint/config-conventional
,它提供了Angular风格的提交规范 - 大型项目:考虑创建团队专属的共享配置,统一管理规则
- Monorepo项目:可以为不同子项目创建不同的配置
- TypeScript项目:使用类型化的配置以获得更好的开发体验
通过合理配置CommitLint,团队可以确保所有提交信息遵循统一的规范,大大提升项目的可维护性和自动化工具链的兼容性。
commitlint 项目地址: https://gitcode.com/gh_mirrors/co/commitlint
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考