跳到主要内容
版本:10.x

在 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 目录中,应该提交到仓库。

发布更改

  1. 运行 pnpm changeset version。这将升级之前通过 pnpm changeset 指定的包的版本(以及这些包的所有依赖包),并更新变更日志文件。
  2. 运行 pnpm install。这将更新锁文件并重新构建包。
  3. 提交更改。
  4. 运行 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 的信息和文档可以在这里找到。