在 pnpm 中使用 Changesets
设置
要在 pnpm 工作区上设置 changesets,将 changesets 作为开发依赖安装在工作区根目录:
pnpm add -Dw @changesets/cli
然后运行 changesets 的 init 命令以生成 changesets 配置:
pnpm changeset init
添加新的 changesets
要生成一个新的 changeset,在仓库根目录运行 pnpm changeset。在 .changeset 目录中生成的 markdown 文件应提交到仓库。
发布变更
- 运行
pnpm changeset version。这会提升之前用pnpm changeset指定的包(以及它们的任何依赖方)的版本,并更新变更日志文件。 - 运行
pnpm install。这会更新锁文件并重新构建包。 - 提交这些更改。
- 运行
pnpm publish -r。此命令将发布所有版本已提升但 registry 中尚不存在的包。
与 GitHub Actions 集成
要将此过程自动化,你可以在 GitHub Actions 中使用 changeset version。该 action 会在 changeset 文件进入 main 分支时检测到,然后新建一个列出所有已提升版本包的 PR。每当有新的 changeset 文件进入 main,该 PR 都会自动更新自己。一旦合并,包就会被更新,并且如果在 action 上指定了 publish 输入,它们将使用给定的命令发布。
添加发布脚本
添加一个名为 ci:publish 的新脚本,执行 pnpm publish -r。一旦 changeset version 创建的 PR 被合并,它就会发布到 registry。如果该包是公共且带 scope 的,可能需要添加 --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 认证令牌作为仓库密钥。
.github/workflows/changesets.yml
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 and Node.js
uses: pnpm/setup@v2
with:
runtime: node@20
cache: true
- 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 的更多信息和文档可在此处找到。
本页内容译自pnpm 官方文档(MIT License),如有出入以英文原文为准。