scopes
scopes,通常来定义本次 commit 涉及范围,一般有两种:根据项目代码层面区分比如 monorepo ,另外一种就是项目业务区分
针对 项目代码 的 scopes
如果你需要管理多软件包在commit时获得更好的体验,比如使用: pnpm | lerna.js 管理 monorepo 可以利用 path
和 fs
模块动态定义 commit message 中的scopes(范围)显示
js
// .commitlintrc.js
const fs = require('node:fs')
const path = require('node:path')
const packages = fs.readdirSync(path.resolve(__dirname, 'packages'))
module.exports = {
prompt: {
scopes: [...packages]
}
}
// .commitlintrc.js
const fs = require('node:fs')
const path = require('node:path')
const packages = fs.readdirSync(path.resolve(__dirname, 'packages'))
module.exports = {
prompt: {
scopes: [...packages]
}
}
当然如果你使用 commitlint 规则定义了 scope-enum
,会自动引入
js
// .commitlintrc.js
const fs = require('node:fs')
const path = require('node:path')
const packages = fs.readdirSync(path.resolve(__dirname, 'packages'))
module.exports = {
rules: {
'scope-enum': [2, 'always', [...packages]]
}
}
// .commitlintrc.js
const fs = require('node:fs')
const path = require('node:path')
const packages = fs.readdirSync(path.resolve(__dirname, 'packages'))
module.exports = {
rules: {
'scope-enum': [2, 'always', [...packages]]
}
}
针对 项目业务 的 scopes
js
// .commitlintrc.js
module.exports = {
prompt: {
scopes: ['app', 'home', 'account', 'comment']
}
}
// .commitlintrc.js
module.exports = {
prompt: {
scopes: ['app', 'home', 'account', 'comment']
}
}
当然如果你想给自定义范围项添加 简短描述 显示在命令行中可以使用 name
和 value
属性来定义
js
// .commitlintrc.js
module.exports = {
prompt: {
scopes: [
{ value: 'app', name: 'app: 系统业务' },
{ value: 'home', name: 'home: 首页相关' },
{ value: 'account', name: 'account: 账户相关' },
{ value: 'comment', name: 'comment: 评论相关' },
]
}
}
// .commitlintrc.js
module.exports = {
prompt: {
scopes: [
{ value: 'app', name: 'app: 系统业务' },
{ value: 'home', name: 'home: 首页相关' },
{ value: 'account', name: 'account: 账户相关' },
{ value: 'comment', name: 'comment: 评论相关' },
]
}
}
多选模式
- 使用 → 或 空格 选中
- 使用 回车 确定
js
// .commitlintrc.js
const fs = require('fs')
const path = require('path')
const packages = fs.readdirSync(path.resolve(__dirname, 'packages'))
module.exports = {
prompt: {
scopes: [...packages],
enableMultipleScopes: true,
scopeEnumSeparator: ","
}
}
// .commitlintrc.js
const fs = require('fs')
const path = require('path')
const packages = fs.readdirSync(path.resolve(__dirname, 'packages'))
module.exports = {
prompt: {
scopes: [...packages],
enableMultipleScopes: true,
scopeEnumSeparator: ","
}
}
TIP
在多选模式中,如果 defaultScope
传入的的 string[]
, 会将 scopes
范围列表项中的 value 相匹配的选项进行默认选中和置顶操作
输入模式
如果不想使用选择模式,想要使用输入模式 Input。可以使用自定义范围的输入框进行代替使用
js
module.exports = {
messages: { customScope: 'What is the scope of this change:' },
skipQuestions: ['scope'],
defaultScope: '___CUSTOM___:'
}
module.exports = {
messages: { customScope: 'What is the scope of this change:' },
skipQuestions: ['scope'],
defaultScope: '___CUSTOM___:'
}
TIP
如果想要在输入模式获得补全的效果,可以在补全的内容的前缀加上 ___CUSTOM___:
js
module.exports = {
messages: { customScope: 'What is the scope of this change:' },
skipQuestions: ['scope'],
defaultScope: '___CUSTOM___:Hello World'
}
module.exports = {
messages: { customScope: 'What is the scope of this change:' },
skipQuestions: ['scope'],
defaultScope: '___CUSTOM___:Hello World'
}
[进阶] 缓存你的自定义范围 custom scope
- 缓存你输入的自定义范围并在下一次范围选择中显示使用
- GitHub 讨论帖与演示视频: Zhengqbbb/cz-git#104
- 示例代码: Zhengqbbb/czgit-playground/cache-scope
TIP
如果 cz-git
检测到如果 allowEmptyScopes
和 allowCustomScopes
具有非常严格规则(都设置为false)并且 scopes 选择列表仅有一项时,会自动跳过问题并输出
TIP
下面代码可以运行时获取到 HOME
目录,
你可以使用它配合 fs
和path
进行默认的全局自定义配置
js
const USER_HOME = process.env.HOME || process.env.USERPROFILE
// console.log(USER_HOME) === echo "$HOME"
const USER_HOME = process.env.HOME || process.env.USERPROFILE
// console.log(USER_HOME) === echo "$HOME"
利用可高度可定制的
cz-git
让 commit 更方便,更契合习惯,欢迎分享。