跳转到主文档

添加一个 changeset

当我们开发完成一个功能时,需要添加一个 changeset 用于声明当前功能,用于后续版本发布。

信息

一个 changeset 包含的内容包括:

  • 本次变更涉及哪些包的变更。

  • 本次变更需要升级的版本号类型,类型符合 semver 规范。

  • 本次变更的 Changelog 信息。

步骤

info

以下示例命令都以 pnpm 作为包管理工具进行,如果需要使用其他包管理工具,请按需求进行替换。

模块工程方案

在根目录执行以下命令:

pnpm run change

选择本次变更需要升级的版本号类型,点击回车:

选择版本类型

填入 Changelog 信息,并点击两次回车:

写入变更信息

执行完成后,将在项目的 .changeset 目录创建对应的 changeset 文件,文件内容如下:

---
'module-changeset': patch
---

feat: test module solution changeset

该文件中包含了 changeset 的所有信息。

Monorepo 工程方案

我们假设 monorepo 中存在三个模块包,分别为 module-1module-2module-3

在根目录执行以下命令:

pnpm run change

选择本次需要升级的包列表:

Changesets 会根据当前代码变更(git diff Head...baseBranch),将 Monorepo 中的 package 分为两类,changed packagesunchanged packages,方便用户进行选择。

使用空格键选择对应的包或者分类即可,选择完成后点击回车:

选择升级包

分别选择不同版本类型对应的包,changeset 会询问 majorminor 类型,如果存在包未选择这两种类型,将会默认使用 patch 类型:

选择升级包版本类型

填入 Changelog 信息,并点击两次回车:

写入变更信息

执行完成后,将在项目的 .changeset 目录创建对应的 changeset 文件,文件内容如下:

---
'module-2': minor
'module-3': patch
---

feat: test-changeset

该文件中包含了 changeset 的所有信息,不同的包也会根据选择的版本类型进行标记。

参数

change 命令支持以下参数:

  • --empty 添加一个空的 changeset。
pnpm run change -- --empty

执行完成后,将在项目的 .changeset 目录创建空的 changeset 文件,文件内容如下:

---
---
  • --open 使用该参数时,在填写 Changelog 步骤会打开系统默认编辑器进行填写。

注意事项

  • 不是所有的变更都需要 changeset

如果当前变更是修改仓库的一些基础设施,比如 CI、测试等,就不需要添加 changeset 或者可以添加一个空的 changeset。

  • 一个 pull reuqest 可以提交多个 changeset

当一个 pull request 存在多个功能开发或者问题修复时,可以多次执行 pnpm run change 添加多个 changeset 文件,每个文件选择对应功能的包和添加变更信息即可。

  • 创建 changeset 时,需要选择该功能相关的所有包

在 Monorepo 中创建 changeset 时,需要选中和该功能相关的所有变更包,避免出现发版时部分包未发布的情况。