预发版
警告!预发版非常复杂!使用它们需要对 npm 发布的所有部分有透彻的理解。错误可能导致非常难以修复的仓库和发布状态。
警告:如果您决定从仓库的主分支进行预发版,而没有为上一个稳定发布版本创建一个不包含预发版更改的分支,您将阻塞其他更改,直到您准备退出预发版模式。我们强烈建议仅从主分支以外的分支运行预发版。
您可能希望在实际发布之前发布包的版本,Changesets 允许您执行此操作,但由于单体仓库增加的复杂性,重要的是要了解一些注意事项。
当您想要进行预发版时,您需要进入预发版模式。您可以使用 pre enter <tag>
完成。需要传递的标签在版本中使用(例如 1.0.0-beta.0
)以及 npm 的 dist 标签。
预发版工作流可能如下所示:
yarn changeset pre enter next
yarn changeset version
git add .
git commit -m "进入预发版模式并为包版本化"
yarn changeset publish
git push --follow-tags
让我们看看这里发生了什么。对于此示例,假设您的仓库如下所示:
packages/
pkg-a@1.0.0 依赖于 pkg-b@^2.0.0
pkg-b@2.0.0 无依赖
pkg-c@3.0.0 无依赖
.changeset/
pkg-b@minor
yarn changeset pre enter next
此命令将 Changesets 切换到预发版模式,这将在 .changeset
目录中创建一个 pre.json
文件,其中存储了有关预发版状态的信息。有关在 pre.json
文件中存储的具体数据,请参见 @changesets/types
(opens in a new tab) 中 PreState
的类型定义。
yarn changeset version
此命令将按照您通常期望的方式为包版本化,但附加 -next.0
。一个重要的注意是,这将增加那些在正常发布中不会被增加版本的依赖包,因为预发版版本不符合大多数 semver 范围(例如,^5.0.0
不满足 5.1.0-next.0
)。
现在,仓库看起来是这样的:
packages/
pkg-a@1.0.1-next.0 依赖于 pkg-b@^2.0.1
pkg-b@2.1.0-next.0 无依赖
pkg-c@3.0.0 无依赖
.changeset/
yarn changeset publish
此命令将像发布命令一样发布到 npm,但它将将 dist 标签设置为运行预发版命令时指定的标签。
当您想要进行另一次预发版时,您的工作流程可能如下:
yarn changeset version
git add .
git commit -m "为包版本化"
yarn changeset publish
git push --follow-tags
假设我们添加了一些 changeset 和一个新的包,那么我们的仓库现在如下所示:
packages/
pkg-a@1.0.1-next.0 依赖于 pkg-b@^2.0.1
pkg-b@2.1.0-next.0 无依赖
pkg-c@3.0.0 无依赖
pkg-d@0.0.0 无依赖
.changeset/
pkg-a@minor
pkg-c@patch
pkg-d@major
yarn changeset version
版本命令的行为与首次进行预发版的版本化相同,只是末尾的数字会更新。仓库现在看起来是这样的:
packages/
pkg-a@1.1.0-next.1 依赖于 pkg-b@^2.0.1
pkg-b@2.1.0-next.0 无依赖
pkg-c@3.0.1-next.0 无依赖
pkg-d@1.0.0-next.0 无依赖
yarn changeset publish
此命令将发布到 npm,就像第一次预发版一样,只是因为我们正在添加一个新的包(我们需要定义这个,是新的到仓库还是新到 npm?我认为是新到 npm),新的包将以 latest
dist 标签发布,而不是 next
标签,因为它是第一次发布,这意味着它将始终在 latest
上。在 pkg-d 退出预发版之前的未来发布中,它也将被发布到 latest
。
当您准备进行最终发布时,您的工作流可能如下:
yarn changeset pre exit
yarn changeset version
git add .
git commit -m "退出预发版模式并为包版本化"
yarn changeset publish
git push --follow-tags
yarn changeset pre exit
此命令将设置在 pre.json
文件中退出预发版模式的意图,但不会执行任何实际的版本控制。
yarn changeset version
版本命令将应用当前仓库中的任何 changeset,然后从版本中删除预发版标签。仓库现在看起来是这样的:
packages/
pkg-a@1.1.0 依赖于 pkg-b@^2.0.1
pkg-b@2.1.0 无依
赖
pkg-c@3.0.1 无依赖
pkg-d@1.0.0 无依赖
yarn changeset publish
发布命令将像往常一样将所有内容发布到 latest
dist 标签。