自动化版本控制: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促进了更好的团队协作和沟通。开发者可以通过明确的提交规范来传达他们的工作重点,而维护者可以轻松地从变更日志中获取重要信息,以便于编写发布说明和更新文档。

相关推荐
胡西风_foxww26 分钟前
【ES6复习笔记】Spread 扩展运算符(8)
前端·笔记·es6·扩展·运算符·spread
小林爱1 小时前
【Compose multiplatform教程08】【组件】Text组件
android·java·前端·ui·前端框架·kotlin·android studio
跨境商城搭建开发1 小时前
一个服务器可以搭建几个网站?搭建一个网站的流程介绍
运维·服务器·前端·vue.js·mysql·npm·php
hhzz1 小时前
vue前端项目中实现电子签名功能(附完整源码)
前端·javascript·vue.js
秋雨凉人心1 小时前
上传npm包加强
开发语言·前端·javascript·webpack·npm·node.js
NoneCoder2 小时前
CSS系列(37)-- Overscroll Behavior详解
前端·css
Nejosi_念旧2 小时前
使用Webpack构建NPM Library
前端·webpack·npm
前端切圖仔2 小时前
失业,仲裁,都赶上了(二)
前端·javascript·程序员
冰红茶-Tea2 小时前
typescript数据类型(二)
前端·typescript
slongzhang_2 小时前
elementPlus消息组件多按钮案例
前端·javascript·vue.js