在 pnpm 中使用 Changesets
在编写此文档时,最新的 pnpm 版本是 v10.4.1。最新的 Changesets 版本是 v2.28.0。
设置
要在 pnpm 工作空间中设置 changesets,请在工作空间的根目录中将 changesets 安装为开发依赖项:
pnpm add -Dw @changesets/cli
然后运行 changesets 的初始化命令来生成 changesets 配置:
pnpm changeset init
添加新的 changesets
要生成新的 changeset,在仓库根目录运行 pnpm changeset
。
生成的 Markdown 文件位于 .changeset
目录中,应该提交到仓库。
发布更改
- 运行
pnpm changeset version
。这将升级之前通过pnpm changeset
指定的包的版本(以及这些包的所有依赖包),并更新变更日志文件。 - 运行
pnpm install
。这将更新锁文件并重新构建包。 - 提交更改。
- 运行
pnpm publish -r
。此命令将发布所有在注册表中尚未存在的已升级版本的包。
与 GitHub Actions 集成
要自动化此过程,你可以在 GitHub Actions 中使用 changeset version
。该 action 会检测到 changeset 文件何时到达 main
分支,然后打开一个新的 PR,列出所有版本升级的包。每当新的 changeset 文件到达 main
分支时,PR 将自动更新。一旦合并,包将被更新,如果在 action 中指定了 publish
输入,它们将使用给定的命令进行发布。
添加发布脚本
添加一个名为 ci:publish
的新脚本,它执行 pnpm publish -r
。当由 changeset version
创建的 PR 被合并后,这将发布到注册表。如果包是公开的且带有作用域,可能需要添加 --access=public
以防止 npm 拒绝发布。
package.json 示例
{
"scripts": {
"ci:publish": "pnpm publish -r"
},
...
}
添加工作流
在 .github/workflows/changesets.yml
添加一个新的工作流。此工作流将创建一个新的分支和 PR,因此需要在仓库设置中(github.com/<repo-owner>/<repo-name>/settings/actions
)给 Actions 读写权限。如果在 changesets/action
步骤中包含 publish
输入,仓库还应该包含一个名为 NPM_TOKEN
的 npm 认证令牌作为仓库密钥。
工作流配置示例
name: Changesets
on:
push:
branches:
- main
env:
CI: true
jobs:
version:
timeout-minutes: 15
runs-on: ubuntu-latest
steps:
- name: Checkout code repository
uses: actions/checkout@v4
- name: Setup pnpm
uses: pnpm/action-setup@v4
- name: Setup node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
- name: Create and publish versions
uses: changesets/action@v1
with:
commit: "chore: update versions"
title: "chore: update versions"
publish: pnpm ci:publish
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
更多关于 changesets action 的信息 和文档可以在这里找到。