跳到主要内容

版本标准化 【实现自动化版本控制】

规范commit信息​

  • 使用cz-git工具 : 轻量级,高度自定义,标准输出格式的 commitizen 适配器

根据Git Commit生成ChangeLog​

  • Change Log 是发布新版本时,用来说明与上一个版本差异的文档

standard-version​

  • 缓存当前文件变化
  • 将历史回退至最后一个git标签的位置(查看package.json中提供的信息来定位git标签)
  • 提交变动
  • 自动化升级版本号、自动化打tag、自动生成 CHANGELOG

例子: 生成版本号和Tag

ts
// 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 , 别忘了前面的点

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 可能是一个不错的选择用于提交消息

changeset​