pnpm-workspace.yaml
pnpm-workspace.yaml 是 pnpm 的“项目组织与调度中枢”,告诉 pnpm:哪些目录是同一个 workspace,以及这些包之间如何协同工作。
定义哪些包属于同一个仓库
packages:
- packages/*
- apps/*
-
packages/*下面每个有package.json的目录,都是一个包 -
apps/*下面每个 app 也是一个包
Workspace 内包本地互相引用
packages/
utils/
ui/
apps/
admin/
在 apps/admin/package.json 里:
{
"dependencies": {
"@my/utils": "workspace:*"
}
}
效果是:
- 不去 npm 下载
- 直接 软链接到本地 packages/utils
- 改代码立刻生效
这是 monorepo 的灵魂能力。
依赖统一安装、统一锁定
在根目录执行pnpm install
pnpm 会:
- 扫描
pnpm-workspace.yaml里的所有包 - 统一生成 一份
pnpm-lock.yaml - 所有包共享同一个依赖树
支持 catalog
pnpm-workspace.yaml 里可以这样写:
catalog:
vite: ^5.1.0
vue: ^3.4.0
typescript: ^5.3.3
子包中:
"devDependencies": {
"vite": "catalog:",
"vue": "catalog:"
}
版本集中管理,企业级工程标配.
支持 workspace 协议(workspace:*)
"@my/ui": "workspace:*" // 任意版本
"@my/ui": "workspace:^" // 遵循 semver
"@my/ui": "workspace:~"
批量执行命令
pnpm -r build
pnpm -r test
pnpm -r lint
-
-r= recursive - 对 workspace 里的 所有包 执行