当我们开发完成时,需要添加一个 changeset 声明当前变更,用于后续版本发布。
一个 changeset 包含的内容包括:
本次变更涉及哪些包的变更。
本次变更需要升级的版本号类型,类型符合 semver 规范。
本次变更的 changelog 信息。
以下示例命令都以 pnpm 作为包管理工具进行,如果需要使用其他包管理工具,请按需求进行替换。
执行完成后,将在项目的 .changeset
目录创建对应的 changeset 文件,文件内容如下:
该文件中包含了 changeset 的所有信息。
我们假设 monorepo 中存在三个模块包,分别为 module-1
,module-2
,module-3
。
Changesets 会根据当前代码变更(git diff Head...baseBranch
),将 Monorepo 中的 package 分为两类,changed packages
和 unchanged packages
,方便用户进行选择。
使用空格键选择对应的包或者分类即可,选择完成后点击回车:
changeset 会询问 major
和 minor
类型,如果存在包未选择这两种类型,将会默认使用 patch
类型。
执行完成后,将在项目的 .changeset
目录创建对应的 changeset 文件,文件内容如下:
该文件中包含了 changeset 的所有信息,不同的包也会根据选择的版本类型进行标记。
change 命令支持以下参数:
--empty
: 添加一个空的 changeset。执行完成后,将在项目的 .changeset
目录创建空的 changeset 文件,文件内容如下:
--open
: 使用该参数时,在填写 changelog 步骤会打开系统默认编辑器进行填写。如果当前变更是修改仓库的一些基础设施,比如 CI、测试等,就不需要添加 changeset 或者可以添加一个空的 changeset。
当一个 pull request 存在多个功能开发或者问题修复时,可以多次执行 pnpm run change
添加多个 changeset 文件,每个文件选择对应功能的包和添加变更信息即可。
在 Monorepo 中创建 changeset 时,需要选中和该功能相关的所有变更包,避免出现发版时部分包未发布的情况。