自动化版本控制:standard-version入门介绍

前言

在整理项目工作流程的过程中,我寻求一种方法,使得项目发布时能够依据每次的代码提交(commit)自动创建变更日志(changelog)。为了实现这一目标,我开始探索并研究了standard-version这一工具。

简介

standard-version 是一个版本控制的工具,它使用基于 Conventional Commits 约定的 semver 和 CHANGELOG 。

如何使用

首先你的仓库需要遵从 Conventional Commits 规范,当你准备发布时,执行 standard-version 命令。 执行该命令时,会做以下处理:

  1. 通过查看 packageFiles 检查当前版本,返回到最后一个 git tag;
  2. 基于 commits 调整 bumpFiles 中的版本;
  3. 基于 commits 生成 changelog;
  4. 创建一个新的 commit,该 commit 包含 bumpFiles 中的文件和更新后的 CHANGELOG 文件;
  5. 创建一个新的 tag;
  • packageFiles: 定义版本的文件,默认为package.json;在不指定版本时,standard-version会从该文件读取当前版本号,并且发布时会修改该文件中的版本号;如果读取不到,会报错;
  • bumpFiles:需要修改版本号的文件;可以为多个;

配置

配置文件支持.versionrc, .versionrc.json, .versionrc.js

js 复制代码
module.exports = {
  "types": [
    { "type": "feat", "section": "✨ Features | 新功能" },
    { "type": "fix", "section": "🐛 Bug Fixes | Bug 修复" },
    { "type": "docs", "section": "✏️ Documentation | 文档" },
    { "type": "style", "section": "💄 Styles | 风格" },
    { "type": "refactor", "section": "♻️ Code Refactoring | 代码重构" },
    { "type": "perf", "section": "⚡ Performance Improvements | 性能优化" },
    { "type": "test", "section": "✅ Tests | 测试" },
    { "type": "revert", "section": "⏪ Revert | 回退", "hidden": true },
    { "type": "build", "section": "📦‍ Build System | 打包构建" },
    { "type": "chore", "section": "🚀 Chore | 构建/工程依赖/工具" },
    { "type": "ci", "section": "👷 Continuous Integration | CI 配置" }
  ],
  skip: {
    bump: false,
    changelog: false,
    commit: false,
    tag: false
  },
  debug: true,
  dryRun: true,
  packageFiles: [{ filename: 'package.json', type: "json" }],
  bumpFiles: [
    { filename: 'package.json', type: "json" },
    { filename: 'package-lock.json', type: "json" }
  ],
  scripts: {
    "prebump": "echo 9.9.9"
  }
}

生命周期脚本

允许在 release 过程中执行自定义的命令;支持周期如下:

  • prerelease: 在最开始执行,如果该脚本返回一个非零状态码,发布过程将被中断;
  • prebump postbump: 在修改版本之前/之后执行;如果 prebump 返回一个版本,将会使用该版本;
  • prechangelog postchangelog: 在生成 CHANGELOG 之前/之后执行;
  • precommit postcommit: 在 commit 之前/之后执行;
  • pretag posttag : 在 tag 之前/之后执行;

跳过生命周期

skip 可以允许执行时跳过对应的阶段,支持 bump changelog commit tag;

dryRun

当设置 dryRuntrue 时,你可以在命令行看到命令所执行的结果,而不会改变原有仓库;

版本号

默认情况下,standard-version 会根据 commit 记录自动计算发布的版本号;以下以 1.0.0 版本为例:

  • 当 commit 记录包含 fix 时,1.0.0 -> 1.0.1;
  • 当 commit 记录包含 feat 时,1.0.0 -> 1.1.0;
  • 当 commit 记录包含 BREAKING CHANGE 或者 ! 时,1.0.0 -> 2.0.0;

总结

通过使用standard-version,项目维护者可以更加专注于代码的开发和功能的改进,而不必担心版本发布过程中繁琐的版本号管理和变更日志的编写。这个工具不仅简化了版本控制的流程,还有助于保持项目历史的清晰和透明,使得其他开发者和用户能够轻松追踪项目的进展和变更。

此外,standard-version的配置灵活性允许项目根据具体需求进行定制,无论是通过简单的配置文件还是通过生命周期脚本的高级用法。这种灵活性意味着standard-version可以适应不同规模和复杂度的项目,从而在各种开发环境中发挥作用。

通过标准化的提交信息和自动化的发布流程,standard-version促进了更好的团队协作和沟通。开发者可以通过明确的提交规范来传达他们的工作重点,而维护者可以轻松地从变更日志中获取重要信息,以便于编写发布说明和更新文档。

相关推荐
GISer_Jing2 小时前
前端面试通关:Cesium+Three+React优化+TypeScript实战+ECharts性能方案
前端·react.js·面试
落霞的思绪3 小时前
CSS复习
前端·css
咖啡の猫5 小时前
Shell脚本-for循环应用案例
前端·chrome
百万蹄蹄向前冲7 小时前
Trae分析Phaser.js游戏《洋葱头捡星星》
前端·游戏开发·trae
朝阳5818 小时前
在浏览器端使用 xml2js 遇到的报错及解决方法
前端
GIS之路8 小时前
GeoTools 读取影像元数据
前端
ssshooter9 小时前
VSCode 自带的 TS 版本可能跟项目TS 版本不一样
前端·面试·typescript
Jerry9 小时前
Jetpack Compose 中的状态
前端
dae bal10 小时前
关于RSA和AES加密
前端·vue.js
柳杉10 小时前
使用three.js搭建3d隧道监测-2
前端·javascript·数据可视化