Catalog 是 pnpm 提供的一种版本管理机制,用于在 monorepo 中统一管理依赖版本。
pnpm-workspace.yaml 中统一定义所有依赖版本# pnpm-workspace.yaml
catalog:
react: ^19.1.0
antd: ^5.26.3
typescript: ^5.8.3
// 子项目 package.json
{
"dependencies": {
"react": "catalog:",
"antd": "catalog:"
}
}
"@vben/locales": "workspace:*" 表示引用同一个 monorepo 内的其他包。
workspace:* - 引用 workspace 内的包workspace:^ - 引用 workspace 内包的兼容版本workspace:~ - 引用 workspace 内包的补丁版本// 子项目 A 的 package.json
{
"dependencies": {
"@monorepo/ui": "workspace:*", // 引用内部 UI 包
"@monorepo/utils": "workspace:*", // 引用内部工具包
"react": "catalog:" // 引用外部依赖
}
}
假设你的项目结构:
monorepo/
├── packages/
│ ├── ui/ # @monorepo/ui
│ └── utils/ # @monorepo/utils
└── apps/
└── admin/ # 需要引用 ui 和 utils
在 apps/admin/package.json 中:
{
"dependencies": {
"@monorepo/ui": "workspace:*", // 引用内部 UI 包
"@monorepo/utils": "workspace:*", // 引用内部工具包
"react": "catalog:" // 外部依赖使用 catalog
}
}
| 特性 | Catalog | Workspace |
|---|---|---|
| 用途 | 版本管理 | 内部包引用 |
| 作用范围 | 外部依赖 | 内部包 |
| 语法 | "catalog:" |
"workspace:*" |
| 定义位置 | pnpm-workspace.yaml |
各包的 package.json |
| 依赖来源 | npm registry | 本地 workspace |
monorepo/
├── packages/
│ ├── ui/ # 共享 UI 组件
│ ├── utils/ # 共享工具函数
│ └── types/ # 共享类型定义
├── apps/
│ ├── admin/ # 管理后台
│ └── user/ # 用户端
└── pnpm-workspace.yaml # workspace 配置
// apps/admin/package.json
{
"dependencies": {
// 内部包使用 workspace
"@monorepo/ui": "workspace:*",
"@monorepo/utils": "workspace:*",
"@monorepo/types": "workspace:*",
// 外部依赖使用 catalog
"react": "catalog:",
"antd": "catalog:",
"axios": "catalog:"
}
}
packages:
- packages/*
- apps/*
catalog:
# 外部依赖版本管理
react: ^19.1.0
antd: ^5.26.3
typescript: ^5.8.3
.code-workspace 文件是 VS Code 的多根工作区配置文件,用于管理包含多个项目文件夹的工作区。
{
"folders": [
{
"name": "Root",
"path": "."
},
{
"name": "UI Package",
"path": "./packages/ui"
},
{
"name": "Admin App",
"path": "./apps/purchase-admin"
},
{
"name": "Internal Tools",
"path": "./internal"
}
],
"settings": {
"typescript.preferences.includePackageJsonAutoImports": "on",
"eslint.workingDirectories": [
"packages/ui",
"apps/purchase-admin"
]
},
"extensions": {
"recommendations": [
"ms-vscode.vscode-typescript-next",
"esbenp.prettier-vscode",
"dbaeumer.vscode-eslint"
]
}
}
.code-workspace 文件code zw-admin.code-workspace