版本标准化 【实现自动化版本控制】
规范commit信息
- 使用cz-git工具 : 轻量级,高度自定义,标准输出格式的 commitizen 适配器
根据Git Commit生成ChangeLog
- Change Log 是发布新版本时,用来说明与上一个版本差异的文档
standard-version
- 缓存当前文件变化
- 将历史回退至最后一个git标签的位置(查看package.json中提供的信息来定位git标签)
- 提交变动
- 自动化升级版本号、自动化打tag、自动生成 CHANGELOG
例子: 生成版本号和Tag
// generate version/tags
const { execSync } = require('child_process')
const pkg = require('../packages/table/package.json')
const { program } = require('commander')
program.option('-r, --release <version>', 'package version')
program.parse()
const { release } = program.opts()
const tag = `${pkg.name}-v${release}`
try {
if (release) {
const value = execSync(`git tag -l ${tag}`).toString('utf8')
if (!value) {
execSync(
`cd packages/table && standard-version -r ${release} -t ${pkg.name}-v --infile ../../CHANGELOG.md`,
)
execSync(`git push origin ${tag}`)
execSync(`git push origin HEAD`)
} else {
throw `${tag} already exists`
}
} else {
throw 'release does not exist'
}
} catch (e) {
console.log(e)
}
release-it
-
支持版本号升级;
-
支持 Git 提交、打 Tag、推送;
-
支持使用 Hooks 执行测试或构建等命令;
-
支持在 GIthub 发布版本;
-
支持发布到 NPM 仓库;
-
支持插件扩展功能;
-
生成changelog,通过@release-it/conventional-changelog插件
-
支持自定义配置,通过配置文件
release-it自定义版本号
- release-it --bump minor
release-it的bump选项来指定要发布的版本类型(例如major、minor或patch)
release-it.json
-
配置release-it, 指定发布过程的配置
%s: 占位符来指定版本号- tagExists: 可以通过检查本地 Git 仓库中的标签来判断标签是否已存在。
-
git.requireUpstream
- 如果设置了
requireUpstream为true,则release-it在发布前会检查本地仓库是否已拉取远程仓库的最新提交,并确保本地仓库与远程仓库的HEAD指针相同。如果本地仓库没有与远程仓库同步,则会中止发布流程,并给出警告信息 - 如果设置了
requireUpstream为false,则release-it在发布前不会检查本地仓库是否与远程仓库同步。在这种情况下,如果本地仓库没有与远程仓库同步,发布流程将继续进行
设置
requireUpstream的目的是为了确保在发布前本地仓库的状态与远程仓库的状态相同,以避免发布过程中出现冲突或错误 - 如果设置了
注意配置文件是
.release-it.json, 别忘了前面的点
{
"github": {
"release": true
},
"git": {
"commitMessage": "release: v${version}",
// 自定义tag
"tagName": 'my-tag%s',
// 校验tag是否存在
"tagExists": true
},
"npm": {
"publish": false
},
"hooks": {
"after:bump": "echo 更新版本成功"
},
"plugins": {
"@release-it/conventional-changelog": {
"preset": "angular",
"infile": "CHANGELOG.md"
}
}
}
standard-version和release-it相比
release-it 和 standard-version 都是可用于自动化发布软件过程的工具。它们都提供创建和管理发布的功能,包括版本升级、变更日志生成和标签创建
- release-it 可以使用插件进行定制,可以根据特定项目的需求来定制, 可以通过配置文件来定义行为
- 可以设置提交的更改、发布到远程仓库、发布到npm
- standard-version 它遵循基于 SemVer 的标准版本控制方案,并提供一组可用于生成变更日志的常规提交类型,standard-version没有配置文件,只能通过命令行参数来控制行为
这两种工具都可用于自动化发布过程,但如果您需要更多自定义和集成选项,release-it 可能是更好的选择,而如果您想要遵循标准版本控制方案并遵循约定,standard-version 可能是一个不错的选择用于提交消息