在monorepo中使用changesets
原文链接:https://github.com/taoliujun/blog/issues/33
changesets是目前(2023年)最流行的(多)包管理和发布工具了,使用它可以方便的生成CHANGELOG、打版本号和发布。
项目链接:changesets
我这有个pnpm monorepo库,现在在用changesets管理发布版本了。
安装
1 | pnpm add -Dw @changesets/cli @changesets/changelog-git |
@changesets/cli是必须安装的,@changesets/changelog-git是CHANGELOG生成风格,可以选择其他的,也可以不安装,用默认的。
初始化
1 | pnpm changeset init |
生成.changeset目录,里面有config.json,我修改了一下,如下:
1 | { |
发布一个包
现在,我要给包pack1添加一些新特性,和修复一些bug。
特性代码有点长,我要写好几天的代码。仍然按照以往的commit message的频率和风格去提交代码。这个commit message里的type和subject,都不会影响CHANGELOG和包版本号。
随时添加一个changeset
当我完成一个特性,或修复了一个bug,可以随时打一个changeset标记,这样就可以记录下来,方便后面生成CHANGELOG。再次说明,这个changeset标记和commit message是互不冲突的,changeset标记是用来管理包版本的,而commit message是用来管理代码的。
这和之前使用lerna有点区别,lerna是根据commit message来决定版本号和CHANGLOG的,而changesets是根据changeset add和changeset version来决定的。
changeset这么做的目的是,让开发者将包管理和代码管理分开,这样更加灵活。
1 | // 添加一个changeset标记 |
会出现交互,让你选择要打标记的包,版本号等。
选版本遇到一个坑,总是显示major???
changeset老版本会让你上下选择版本类型,而新的changeset的交互改了,在提示major的时候,未选择的包,按回车后会进入到选择minor的步骤。
生成CHANGELOG和版本号
终于,我完成了所有的特性和bug,准备发布了。
可以查看.changeset下有很多.md文件,这些就是之前随时添加的changeset标记。每一个文件描述了改动的包、改动的类型、改动的内容。在下一步操作之前,可以直接修改这些.md文件,来修改上述提到的类型、内容等。
准备好了,运行
1 | pnpm changeset version |
changeset会生成CHANGELOG和版本号,在最终发布之前,最好查看一下。
发布
1 | pnpm changeset publish |
它会自动调用pnpm publish,发布到npm仓库,并且打上tag。不过可惜的是,要手动push tag到远程:git push --tags。