准备工作
全局安装pnpm
$ npm i pnpm -g
安装changesets
$ pnpm i @changesets/cli -Dw
初始化
- 创建项目
$ mkdir my-project
$ mkdir my-project/packages
$ pnpm init
- 指定
packages
范围
创建pnpm-workspace.yaml
,并添加如下内容
packages:
- "packages/*"
- 添加
package
在packages
目录下新建项目(如:pkg1、pkg2)
package没有特别的规则,遵循 npm标准就行
- 初始化
changeset
pnpm changeset init
执行命令后会在根目录生成.changeset/conifg.json
文件,里面是changeset的相关配置
{
"$schema": "https://unpkg.com/@changesets/[email protected]/schema.json",
"changelog": "@changesets/cli/changelog", //更新日志生成函数的加载地址
"commit": true, //自动提交version的改动
"fixed": [], //捆绑发布的包
"linked": [],//设定版本保持一致的包
"access": "public", //公开,如果你想阻止一个包被发布到npm,在包的package.json中设置private: true (可选值:restricted,不公开)
"baseBranch": "master", //主分支名
"updateInternalDependencies": "patch", //是否主动更新package的依赖,patch、minor
"ignore": [] //指定不发布的包
}
添加依赖
添加三方依赖
$ pnpm i axios -C packages/packageA #包路径为packages/packageA的包添加axios
$ pnpm i axios --filter packageName #给包名(package.json中那name字段)为packageName的包添加axios依赖
$ pnpm i axios -w #将axios安装到根目录
如果是本地的包相互依赖,可以使用workspace协议安装,例如包pkg1
依赖本地的pkg2
pnpm i pkg2@workspace --filter pkg1
版本管理
当修改了某个或者几个包,需要在发布之前通过changesets
更新版本号:
$ pnpm changeset add #选择需要修改版本的包
如果想更换版本号升级类型:major
、minor
、patch
,在第一次选择完包名之后(如下图)按回车健而不是空格键
根据提示选择,之后会在.changeset
目录下生成修改日志文件
---
"@super-poster/pkg1": major
"@super-poster/pkg2": major
---
修改日志信息
该文件描述了执行changeset version
之后将被更改的包以及版本号升级了类型和修改的提交message
我们也可以修改这个文件,达到我们的需求,例如讲major
修改更patch
,那么将更新第三位版本号(如:v0.0.1 -> v0.0.2),一般操作无误的情况下,我们是无需修改这个更新文件的
选择完要修改版本的包之后,将修改提交到git,然后执行changese version
命令更新版本
pnpm changeset version
执行完上面的命令之后,选择的包的版本号将会被更新,确认无误之后发布到npm
pnpm publish -r