乐闻世界logo
搜索文章和话题

pnpm workspace 如何配置和使用?

3月6日 23:39

pnpm workspace 是 pnpm 内置的 monorepo 解决方案,用于管理多个包在一个仓库中。

基本配置:

yaml
# pnpm-workspace.yaml packages: - 'packages/*' # 所有 packages 目录下的包 - 'apps/*' # 所有 apps 目录下的应用 - 'shared/*' # 共享模块

项目结构示例:

shell
my-monorepo/ ├── pnpm-workspace.yaml ├── package.json ├── pnpm-lock.yaml ├── packages/ │ ├── ui/ │ │ ├── package.json │ │ └── src/ │ └── utils/ │ ├── package.json │ └── src/ └── apps/ ├── web/ │ ├── package.json │ └── src/ └── server/ ├── package.json └── src/

包间依赖引用:

json
// apps/web/package.json { "name": "@my-org/web", "dependencies": { "@my-org/ui": "workspace:*", // 使用 workspace 协议 "@my-org/utils": "workspace:^1.0.0" } }

workspace 协议类型:

json
{ "dependencies": { "package": "workspace:*", // 使用最新版本 "package": "workspace:^", // 兼容版本 "package": "workspace:~", // 近似版本 "package": "workspace:^1.0.0" // 指定版本范围 } }

常用命令:

bash
# 安装所有依赖 pnpm install # 在特定包中运行命令 pnpm --filter @my-org/ui build pnpm -F @my-org/ui build # 简写 # 在所有包中运行命令 pnpm -r build # 递归执行 # 只在有变化的包中运行 pnpm -r --filter "...[origin/main]" build # 添加包间依赖 pnpm --filter @my-org/web add @my-org/ui

优势对比:

特性pnpm workspaceLernaYarn Workspaces
内置支持❌ 需安装
依赖共享✅ 硬链接✅ 符号链接
磁盘效率最高一般中等
配置复杂度简单复杂简单

最佳实践:

bash
# 使用 changesets 管理版本 pnpm add -Dw @changesets/cli pnpm changeset init # 发布流程 pnpm changeset # 记录变更 pnpm changeset version # 更新版本 pnpm -r publish # 发布所有包
标签:PNPM