使用pnpm的monorepo组织项目
初始化项目
pnpm init
1
在根目录下创建pnpm-workspace.yaml
文件
packages:
# 子目录下所有项目
- "packages/*"
# 公共目录
- "common"
1
2
3
4
5
2
3
4
5
# 暴漏公共模块
pnpm -F mobile add common
pnpm -F "./packages/\*" add common
1
2
2
# 为指定模块安装依赖
pnpm --filter mobile i -S lodash // 生产依赖
pnpm --filter mobile i -D lodash // 开发依赖
1
2
2
# 指定内部模块之间的互相依赖
// 指定 a 模块依赖于 b 模块
pnpm --filter a i -S b
1
2
2
pnpm workspace 对内部依赖关系的表示不同于外部,它自己约定了一套 Workspace 协议 (workspace:)。下面给出一个内部模块 a 依赖同是内部模块 b 的例子。
{
"name": "a",
// ...
"dependencies": {
"b": "workspace:^"
}
}
1
2
3
4
5
6
7
2
3
4
5
6
7
在实际发布 npm 包时,workspace:^ 会被替换成内部模块 b 的对应版本号(对应 package.json 中的 version 字段)。替换规律如下所示:
{
"dependencies": {
"a": "workspace:*", // 固定版本依赖,被转换成 x.x.x
"b": "workspace:~", // minor 版本依赖,将被转换成 ~x.x.x
"c": "workspace:^" // major 版本依赖,将被转换成 ^x.x.x
}
}
1
2
3
4
5
6
7
2
3
4
5
6
7
# 运行子项目
# pnpm run --filter 子项目package.json中name 子项目命令
pnpm run --filter mobile dev
1
2
2
上次更新: 2024/11/05, 17:01:10