fec-monorepo-project-standardlisted
Install: claude install-skill bovinphang/frontend-craft
# Monorepo 项目规范
适用于使用 pnpm workspace、Turborepo 或 Nx 的多包前端仓库。
## Purpose
规范 Monorepo 项目的目录结构、依赖管理、任务编排和包发布流程,确保多包协作的构建效率和版本一致性。
## Procedure
1. 先确认仓库是否已使用 pnpm workspace、Turborepo 或 Nx,并沿用现有包命名与任务约定。
2. 将应用放在 `apps/`,共享库、配置和工具放在 `packages/` 或既有等价目录。
3. 内部依赖使用 `workspace:*`,通过依赖图驱动构建顺序。
4. 为 build、lint、test 配置可缓存、可并行、可增量的根任务,并明确输入、输出和环境变量。
5. 在 Turborepo/Nx 中配置 affected/changed 范围命令,CI 优先跑受影响包,同时保留主干全量验证入口。
6. 发布包前检查包边界、循环依赖、exports、peer dependencies 和版本策略。
## 工具选择
| 工具 | 适用 | 特点 |
| ------------------ | ---- | -------------------------- |
| **pnpm workspace** | 基础 | 依赖提升、链接、脚本聚合 |
| **Turborepo** | 推荐 | 缓存、并行、依赖图 |
| **Nx** | 大型 | 增量构建、云缓存、插件生态 |
## 目录结构
### pnpm + Turborepo
```
├── package.json # 根 package,workspace 配置
├── pnpm-workspace.yaml # workspace 包列表
├── turbo.json # Turborepo 配置
│
├── apps/
│ ├── web/ # 主应用
│ │ ├── package.json
│ │ └── ...
│ ├── admin/ # 管理后台
│ └── docs/ # 文档站
│
├── packages/
│ ├── ui/ # 共享 UI 组件
│ │ ├── package.json
│ │ └── src/
│ ├── utils/ # 工具函数
│ ├── config-eslint/ # 共享 ESLint 配置
│ └── config-typescript/ # 共享 TS 配置
│
└── tooling/ # 构建/测试工具(可选)
└── scripts/
```
### pnpm-workspace.yaml
```yaml
packages:
- "apps/*"
- "packages/*"
```
## 依赖管理
- 内部包使用 `workspace:*` 协议
- 根 `packa