正在加载,请稍候…

pnpm Workspaces:Monorepo 管理指南

使用 pnpm workspaces 高效管理 monorepo,学习工作区配置、共享包、脚本和版本管理。

pnpm Workspaces:Monorepo 管理指南

pnpm Workspaces:Monorepo 管理指南

pnpm 高效的存储模型和工作区支持使其成为 monorepo 的理想选择。

设置

# pnpm-workspace.yaml
packages:
  - 'packages/*'
  - 'apps/*'
  - '!**/test/**'
// package.json (根目录)
{
  "name": "my-monorepo",
  "private": true,
  "scripts": {
    "build": "pnpm -r build",
    "test": "pnpm -r test",
    "lint": "pnpm -r lint"
  },
  "devDependencies": {
    "typescript": "^5.0.0"
  }
}

pnpm Workspaces:Monorepo 管理指南插图

工作区结构

monorepo/
├── pnpm-workspace.yaml
├── package.json
├── packages/
│   ├── ui/
│   │   ├── package.json
│   │   └── src/
│   └── utils/
│       ├── package.json
│       └── src/
└── apps/
    ├── web/
    │   └── package.json
    └── api/
        └── package.json

pnpm Workspaces:Monorepo 管理指南插图

跨包依赖

// apps/web/package.json
{
  "name": "@myrepo/web",
  "dependencies": {
    "@myrepo/ui": "workspace:*",
    "@myrepo/utils": "workspace:*"
  }
}

pnpm Workspaces:Monorepo 管理指南插图

过滤命令

# 在特定包中运行
pnpm --filter @myrepo/web dev

# 在所有匹配模式的包中运行
pnpm --filter "./packages/**" build

# 连同依赖一起运行
pnpm --filter @myrepo/web... build

# 在变更的包中运行
pnpm --filter "[origin/main]" test

共享配置

// packages/tsconfig/base.json
{
  "compilerOptions": {
    "target": "ES2022",
    "strict": true,
    "moduleResolution": "bundler"
  }
}
// apps/web/tsconfig.json
{
  "extends": "@myrepo/tsconfig/base.json",
  "include": ["src"]
}

目录(pnpm v9+)

# pnpm-workspace.yaml
catalog:
  react: ^18.2.0
  typescript: ^5.0.0
// packages/ui/package.json
{
  "dependencies": {
    "react": "catalog:"
  }
}

pnpm 的内容可寻址存储通过跨项目共享包文件来节省磁盘空间。