Monorepo 工程组织:pnpm + Nx
Monorepo 的工程组织:pnpm workspace 管理依赖和包链接,Nx 做任务编排和构建缓存,共享包设计。
#type / concept
#status / growing
#tech / dev / frontend / eng
[!info] related notes
- 相关: Monorepo 架构
- 共享包: 共享类型契约包
Monorepo 工程组织:pnpm + Nx
为什么 Monorepo
多服务项目(前端 + 后端 + AI 服务)放在同一个仓库:
- 跨服务协调更容易(一个 PR 改前后端)
- 共享类型定义(contracts 包)
- 统一 CI/CD 流程
pnpm workspace
# pnpm-workspace.yaml
packages:
- packages/*
- apps/web
packages/*: 共享包(contracts、utils)apps/web: 前端项目- Go 和 Python 不通过 pnpm 管理,但可以通过 Nx 参与任务编排
Nx 的价值
| 能力 | 说明 |
|---|---|
| 任务编排 | 依赖图决定执行顺序(先 build 依赖包) |
| 构建缓存 | 相同输入跳过重复执行 |
| 增量执行 | affected 只跑变更项目 |
{
"targetDefaults": {
"build": {
"dependsOn": ["^build"], // 先构建依赖
"cache": true
}
}
}
Go/Python 纳入 Nx
通过自定义 target 参与任务编排:
{
"targets": {
"serve": { "command": "go run cmd/server/main.go", "cwd": "apps/api" },
"test": { "command": "go test ./...", "cwd": "apps/api" }
}
}
常用命令
pnpm dev # 并行启动所有服务
pnpm build # 构建所有项目
pnpm affected:test # 只跑变更项目的测试
pnpm graph # 查看依赖关系图