在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
。