添加一个 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-1
,module-2
,module-3
。
在根目录执行以下命令:
pnpm run change
选择本次需要升级的包列表:
Changesets 会根据当前代码变更(git diff Head...baseBranch
),将 Monorepo 中的 package 分为两类,changed packages
和 unchanged packages
,方便用户进行选择。
使用空格键选择对应的包或者分类即可,选择完成后点击回车:
分别选择不同版本类型对应的包,changeset 会询问 major
和 minor
类型,如果存在包未选择这两种类型,将会默认使用 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 时,需要选中和该功能相关的所有变更包,避免出现发版时部分包未发布的情况。