Monorepo 项目离不开的就是版本和发布更新日志的管理。不知道[Monorepo](现代 Monorepo 工程技术选型,聊聊我的思考 (qq.com))的同学可以看下这篇文章。
一般的 Monorepo 项目下都会有很多个 package ,比如一个UI组件库大概就会有UI库package、一个文档DOC的package、一个Demo的package等等。
每次发布 Monorepo 的项目的时候就需要去维护发布的版本号和更新日志,如果这些都通过手动来修改和描述那就很复杂了。
所以我们今天来介绍下changesets。一个用来优化这些流程,变成规范工作流的发布管理工具。
生成的 changelog 遵循 语义化版本 2.0.0 ,具体的做法是先根据你的代码更改生成 changeset 文件,然后发版的时候合并这些 changeset 文件、更改版本号、生成 changelog。
npm install @changesets/cli -D
npm install @changesets/changelog-github -D //可选
npx changeset init
初始化完成后项目的根目录会有一个.changeset的文件夹,里面的config.json就是changeset的配置文件,如下:
{
"$schema": "https://unpkg.com/@changesets/config@2.2.0/schema.json",
"changelog": "@changesets/cli/changelog",
"commit": false,
"fixed": [],
"linked": [],
"access": "public", // 默认值为restricted
"baseBranch": "master",
"updateInternalDependencies": "patch",
"ignore": []
}
我们可以关注下其中的 changelog 和 access 。changelog 可以修改为我们安装的 @changesets/changelog-github
,access 的默认值为 restricted
,可以修改为 public
。更多的配置信息说明可以看changesets/config-file-options.md at main · changesets/changesets (github.com)。
会问你哪些包要发布major的版本,如果一个都不选会继续问你哪些包要发布minor的版本,如果你还是不选它就会发布patch版本了。并且会自动显示各个package的version号
添加更新摘要
生成 chanegset 在.changeset文件夹下
npx changeset version
这个命令会自动更新每个package下的 package.json 以及 CHANGELOG.md。并删除上面生成chanegset md文件。
npx changeset publish
接着我们就可以用命令发布我们的packagse了