用途:Changesets 用于多包仓库的版本管理与变更日志生成,适合 monorepo 版本控制、自动化 changelog、多包协同发布、CI 驱动发布以及预发布/快照流程。不适用于无 npm 发布的单文件项目、基于提交信息的 semantic-release、无注册表的手动版本管理,或单人无需 PR 协作的发布场景。
主要能力:贡献者在 .changeset/ 添加 changeset 文件,声明受影响包、升级类型(major/minor/patch)和摘要,随代码提交进 PR。changeset version 消费所有待处理 changeset,计算版本升级、更新 package.json、生成 CHANGELOG.md 并调整内部依赖范围;changeset publish 发布到 npm 并创建 git 标签,须紧接 version 执行且中间不能有提交。支持 linked(共享最高升级幅度但版本号独立)、fixed(组内版本号完全一致)、prerelease 模式(如 1.0.0-beta.0)、snapshot 快照版本(0.0.0-时间戳)。配置项包括 changelog、commit、access、baseBranch、linked、fixed、ignore、updateInternalDependencies、privatePackages 等。
使用方式:npx @changesets/cli init 初始化;npx @changesets/cli add 交互式添加;add --empty 声明无需版本变更;version 升级版本;publish 发布;status 检查待处理 changeset;status --since=main 检查分支以来变更;pre enter <tag> / pre exit 进出预发布模式;version --snapshot 生成快照;publish --tag canary --no-git-tag 发布快照。CI 中官方 GitHub Action 通过自动维护的 Version Packages PR 自动化 version 与 publish。
限制与常见错误:version 与 publish 之间不能提交;无包变更的 PR 需用 --empty 满足 CI;需共享精确版本用 fixed 而非 linked;公开包需设 access: public;CI checkout 需 fetch-depth: 0;publish 前须先构建;预发布应在专用分支;忽略被依赖的包会破坏依赖方;快照发布须用 --tag 避免覆盖 latest;CI 需设置 NPM_TOKEN 与 GITHUB_TOKEN;不要手动编辑生成的 CHANGELOG.md。