Skills monorepo-project-standard
Monorepo 项目规范,涵盖 pnpm workspace、Turborepo、Nx 的目录结构、依赖管理、任务编排、包发布。当用户提到 monorepo、workspace、多包、pnpm workspace、Turborepo、Nx 时自动激活。
install
source · Clone the upstream repo
git clone https://github.com/openclaw/skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/bovinphang/monorepo-project-standard" ~/.claude/skills/openclaw-skills-monorepo-project-standard && rm -rf "$T"
OpenClaw · Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/bovinphang/monorepo-project-standard" ~/.openclaw/skills/openclaw-skills-monorepo-project-standard && rm -rf "$T"
manifest:
skills/bovinphang/monorepo-project-standard/SKILL.mdsource content
Monorepo 项目规范
适用于使用 pnpm workspace、Turborepo 或 Nx 的多包前端仓库。
适用场景
- 新建或调整 Monorepo 结构
- 管理多包依赖与任务
- 配置 Turborepo / Nx 任务编排
- 包发布与版本管理
工具选择
| 工具 | 适用 | 特点 |
|---|---|---|
| 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
packages: - 'apps/*' - 'packages/*'
依赖管理
- 内部包使用
协议workspace:* - 根
统一部分依赖版本,子包可覆盖package.json - 禁止循环依赖,通过
检查pnpm why
{ "dependencies": { "@repo/ui": "workspace:*", "@repo/utils": "workspace:*" } }
Turborepo 任务编排
{ "$schema": "https://turbo.build/schema.json", "tasks": { "build": { "dependsOn": ["^build"], "outputs": ["dist/**", ".next/**"] }, "lint": { "dependsOn": ["^build"] }, "test": { "dependsOn": ["^build"] } } }
表示先执行依赖包的 build^build
用于缓存命中判断outputs
Nx 任务编排
{ "targetDefaults": { "build": { "dependsOn": ["^build"], "outputs": ["{projectRoot}/dist"], "cache": true } } }
包命名
- 内部包:
或@org/package-name@repo/package-name - 发布到 npm:遵循
规范@scope/name
强约束
- 子包之间通过
引用,不发布到 npm 再安装workspace:* - 共享配置(ESLint、TS)放在
,子包 extendspackages/config-* - 构建顺序由依赖图决定,不手动指定无关依赖
- 根目录执行
或pnpm -r build
时,所有包按序构建turbo run build