使用 pnpm wrokspace 改造 plugin-light。
# 一些命令
# -w
-w, --workspace-root 表示在workspace的根目录下安装而不是当前的目录
比如
pnpm i -Dw rollup
# --filter
pnpm 提供了 --filter 参数,可以用来对特定的package进行某些操作
如果想给 pkg1 安装一个依赖包,比如 axios
pnpm add axios --filter @xxx/pkg1
需要注意的是,--filter 参数跟着的是package下的 package.json 的 name 字段,并不是目录名。
关于 --filter 操作其实还是很丰富的,比如执行 pkg1 下的 scripts 脚本:
pnpm build --filter @xxx/pkg1
filter 后面除了可以指定具体的包名,还可以跟着匹配规则来指定对匹配上规则的包进行操作
pnpm build --filter "./packages/**"
此命令会执行所有 package 下的 build 命令。
# -r, --recursive
在工作区的每个项目中运行命令
# 模块之间的相互依赖
基于 pnpm 提供的 workspace:协议,可以方便的在 packages 内部进行互相引用。比如在 pkg1 中引用 pkg2:
pnpm install @xxx/pkg2 -r --filter @xxx/pkg1
此时我们查看 pkg1 的 package.json,可以看到 dependencies 字段中多了对 @xxx/pkg2 的引用,以 workspace: 开头,后面跟着具体的版本号。
{
"name": "@xxx/pkg1",
"version": "1.0.0",
"dependencies": {
"@xxx/pkg2": "workspace:^1.0.0",
"axios": "^0.27.2"
}
}
在设置依赖版本的时候推荐用 workspace:*,这样就可以保持依赖的版本是工作空间里最新版本,不需要每次手动更新依赖版本。
当 pnpm publish 的时候,会自动将 package.json 中的 workspace 修正为对应的版本号。
参考:
- https://juejin.cn/post/7098609682519949325
- https://developer.baidu.com/article/details/3219676