Changesets 是面向 JavaScript 单体仓库、基于文件的版本管理与变更日志工具,现已发布 3.0 版本。这是自 v2 发布七年来的首个大版本更新,带来了更轻量化的安装包、重构后的命令行工具,以及大家期待已久的对等依赖版本升级逻辑改动。
该版本于 2026 年 8 月 11 日发布,由更新后的维护团队主导——Mateusz Burzyński、Bjorn Lu 和 Adam Haglund——整个开发过程遵循公开的 v3 发布计划。此次发布同步上线了全新的文档站点,配套的 changesets/action v2 也一同发布,该工具目前每周下载量超 300 万次。
所有包现在仅支持 ESM,要求 Node.js 22.11 或更高版本,包管理器最低版本要求 pnpm 10、npm 10.9 或 Yarn 4.5.2,同时不再支持 Yarn Classic。这次清理将安装包体积从 16.1MB 缩减至 2.1MB,依赖数量从 95 个减少到 39 个。项目内部迁移到了 tsdown、rolldown、vitest 和 oxfmt。变更日志格式化不再捆绑自带的 Prettier,而是通过 @changesets/format 来检测项目中已安装的 prettier、oxfmt、deno 或 dprint。
本次最引入注目的行为变更:对等依赖的更新现在会给依赖它的下游包打补丁,而不是主版本。旧行为多年来饱受诟病,其中包括 issue 1011——一个维护设计系统单体仓库的团队反馈,自动升级为主版本号“传递了错误的语义,不符合语义化版本的初衷”。如果作者确实要发布重大变更,仍然可以手动为下游依赖包添加显式的主版本变更记录。
新推出的竞品工具 Bumpy 的维护者指出,v3 版本“把规则硬编码到了另一个极端”,因为现在每个对等变更都被假定为非重大变更,而且两个版本都不允许配置传播规则。他们的对比文章仍然认可 v3 版本解决了很多长期被诟病的老问题,但也列出尚存短板,比如缺少 pnpm catalog 支持以及预发布版本的设计逻辑没有改动。
命令行工具基于 cac 重构了参数解析,使用 clack prompts 实现交互功能,同时修复了取消交互式提示时会导致进程崩溃的问题。新增的 pack 和 publish-plan 命令支持 e18e 社区推荐的构建、打包和发布流程,v2 action 暴露了子 action,使用 npm 可信发布的团队可收紧发布权限。
升级主要是配置层面的工作,具体见迁移指南。除了安装要求之外,部分命令和参数也进行了重命名:
# v2changeset tagchangeset status --sinceMaster# v3changeset git-tagchangeset status --since=main
配置项也有调整:prettier 字段替换为 format;私有包默认不再进行版本管理,除非手动开启该功能:
{ "format": "auto", "privatePackages": { "version": true, "tag": false }}
执行 changeset version 时,如果没有可发布的内容,现在会以退出码 1 终止程序。正如某个团队的发布手册所警示的:“任何在 set -e 下无条件运行它的脚本现在都会在空发布时失败”。
对比 semantic-release(基于约定式提交自动推断版本)和 release-it,Changesets 保留了其独有的取舍设计:由贡献者把发布意图写进 Markdown 文件,发布流程可通过 PR 进行评审。v3 版本没有改动这套核心模型,只是降低了安装开销,并优化了对等依赖相关的处理逻辑。
Changesets 是 MIT 协议开源工具,用于版本管理和变更日志生成,尤其适用于单体仓库。贡献者声明自己的改动该如何发布,CLI 再把这些声明转换成版本号升级、变更日志条目,以及向包仓库的发布操作。v3 版本现已正式可用,v2 版本保留在维护分支上。
查看英文原文:https://www.infoq.com/news/2026/09/changesets-v3-release/