实战

Claude Code Monorepo 完全指南:多包项目的 AI 辅助开发最佳实践

Claude Code 在 Monorepo(单一仓库多包项目)中的完整使用指南:Turborepo/Nx/pnpm workspaces 环境配置、根目录 CLAUDE.md 与包级 CLAUDE.md 的层级设计、--add-dir 跨包访问代码、在 Monorepo 中做跨包重构的标准流程、共享类型库修改时的影响分析、CI/CD 多包测试自动化,以及大型 Monorepo(50+ 包)的上下文管理策略。

2026/3/204分钟 阅读ClaudeEagle

Monorepo 的核心挑战是「代码多、依赖复杂、改一处影响多处」—— 这正是 Claude Code 发挥价值的场景,但需要正确配置上下文。

Monorepo 项目结构示例

my-monorepo/ ← 根目录 ├── CLAUDE.md ← 全局规范(所有包共享) ├── .claude/ │ └── settings.json ├── package.json ← 根 package.json(pnpm workspaces) ├── turbo.json ├── packages/ │ ├── ui/ ← 共享 UI 组件库 │ │ ├── CLAUDE.md ← UI 包专项规范 │ │ └── src/ │ ├── shared/ ← 共享类型和工具函数 │ │ ├── CLAUDE.md │ │ └── src/ │ └── api-client/ ← API 客户端 SDK │ └── src/ └── apps/ ├── web/ ← Next.js 前端 │ ├── CLAUDE.md ← Web 应用专项规范 │ └── src/ └── backend/ ← Fastify 后端 ├── CLAUDE.md └── src/

层级 CLAUDE.md 设计

Claude Code 会从当前目录向上查找所有 CLAUDE.md 并合并。

根目录 CLAUDE.md(全局规范)

markdown
# my-monorepo

## 项目概述
全栈 SaaS 应用 Monorepo,包含前端、后端、共享库

## 技术栈
- 构建工具:Turborepo + pnpm workspaces
- 语言:TypeScript 5.x(全栈统一)
- 测试:Vitest(所有包统一)

## 包结构
- packages/ui:可复用 React 组件库(shadcn/ui 风格)
- packages/shared:共享类型定义和工具函数
- packages/api-client:自动生成的 API 客户端
- apps/web:Next.js 15 前端应用
- apps/backend:Fastify + Prisma 后端

## 关键约定(所有包遵守)
- 所有包使用相同的 TypeScript 配置(继承 tsconfig.base.json)
- 包间引用使用 workspace 协议:`"@myapp/ui": "workspace:*"`
- 修改 packages/shared 中的类型后,必须检查所有依赖包的影响

## 跨包修改流程
1. 先修改 packages/shared 中的类型定义
2. 运行 `pnpm build --filter=shared` 编译
3. 检查类型报错:`pnpm tsc -b --noEmit`
4. 逐个修复受影响的包
5. 全量测试:`pnpm test`

包级 CLAUDE.md(包专项规范)

markdown
# packages/ui - 共享组件库

## 组件设计原则
- 所有组件必须支持 dark mode(使用 CSS variables)
- Props 接口命名:`<ComponentName>Props`
- 每个组件必须有对应的 Storybook story
- 导出路径:从 `packages/ui/src/index.ts` 统一导出

## 禁止在此包中
- 引入 packages/api-client(组件库不应有业务逻辑)
- 直接使用 fetch 或 axios(由调用方处理数据)

跨包访问:--add-dir

bash
# 在 apps/web 目录中工作,同时访问 packages/shared
claude --add-dir ../../packages/shared --add-dir ../../packages/ui

# 现在 Claude 能:
# - 看到 shared 包的类型定义
# - 理解 ui 包的组件 API
# - 做跨包的重构和影响分析

跨包重构标准流程

场景:修改共享类型 User,添加 timezone 字段

你:需要给 packages/shared/src/types/user.ts 里的 User 类型 添加 timezone 字段(string,可选)。 请帮我: 1. 修改类型定义 2. 找出所有依赖 User 类型的地方 3. 评估哪些地方需要更新 4. 按优先级排序给出修改计划 Claude: Step 1:修改类型定义 ✅ packages/shared/src/types/user.ts: + timezone?: string; Step 2:依赖分析(通过搜索找到 23 处引用) - apps/backend/src/services/user.service.ts(3处) - apps/web/src/components/UserProfile.tsx(2处) - packages/api-client/src/endpoints/users.ts(1处) ... Step 3:需要更新的地方(按影响排序)...

大型 Monorepo 的上下文管理

50+ 包的 Monorepo 不能一次全量读取(Token 不够),需要按需加载:

bash
# 策略:从当前任务涉及的包开始,按需扩展

# 1. 先在根目录定位问题
claude "搜索整个项目里使用了 deprecated_function 的所有文件"

# 2. 定位到具体包后,进入该包工作
cd apps/backend
claude --add-dir ../../packages/shared

# 3. 需要跨包时,明确指定要添加的包
claude --add-dir ../../packages/api-client        "api-client 和 backend 的 User 类型不一致,帮我同步"

根目录 .claudeignore

# Monorepo 通用忽略配置 **/node_modules/ **/.turbo/ **/dist/ **/.next/ **/build/ **/*.d.ts # 编译生成的类型文件,看源码就够 **/*.js.map pnpm-lock.yaml # 锁文件不需要 AI 分析

Turborepo + Claude Code 联动

bash
# 提交前验证(Claude 辅助检查 + Turbo 并行构建)
# 先用 Claude 做代码审查
claude -p "审查刚才的改动,重点检查跨包依赖是否正确"   --output-format json | python3 -c "import json,sys; d=json.load(sys.stdin); print(d['result'])"

# 然后运行 Turbo 全量构建验证
pnpm turbo build test lint --filter=[HEAD^1]  # 只构建有变更的包

来源:Claude Code 官方文档 - docs.anthropic.com/en/docs/claude-code

相关文章推荐

实战Claude Code 命令行工具开发实战:用 AI 快速构建专业 CLI 工具Claude Code 辅助命令行工具(CLI)开发的完整实战指南:Python Click/Typer、Go Cobra、Rust Clap 技术栈选型、用 Claude Code 生成完整 CLI 项目结构(参数解析/子命令/全局选项)、交互式提示和彩色输出、配置文件管理、Shell 自动补全生成、跨平台打包(PyInstaller/goreleaser),以及发布到 PyPI/npm/Homebrew 的完整流程。2026/3/26实战Claude Code Vue 3 实战完全指南:Composition API 开发到企业级前端工程化Claude Code 辅助 Vue 3 开发的完整实战指南:Composition API 组件生成(setup/ref/computed)、Pinia 状态管理代码生成、Vue Router 4 路由配置、TypeScript 类型定义生成(Props/Emits)、Composables 抽象、Vitest 单元测试生成、性能优化(虚拟滚动/v-memo),以及 Options API 迁移和响应式丢失问题排查的 Prompt 模板。2026/3/26实战Claude Code Django 实战完全指南:从模型设计到 REST API 开发全流程Claude Code 辅助 Django 开发的完整实战指南:用 Claude Code 生成 Django 项目结构和 Models(含迁移文件)、Django REST Framework(DRF)API 开发(Serializer/ViewSet/Router)、用户认证系统(JWT/Session/第三方登录)、Django ORM 查询优化(select_related/prefetch_related/annotate)、异步任务(Celery + Redis)、测试用例生成(pytest-django)、Docker 化部署,以及在现有 Django 项目中快速定位和修复 Bug 的 Prompt 技巧。2026/3/26实战Claude Code Rust 实战完全指南:从所有权错误到高性能系统编程Claude Code 辅助 Rust 开发的完整实战指南:用 Claude Code 理解 Rust 所有权(ownership)、借用(borrow)和生命周期(lifetime)报错、生成符合 Rust 惯用法的代码(使用 Result/Option/迭代器)、借助 Claude Code 快速上手异步 Rust(Tokio/async-await)、实战案例(CLI 工具/HTTP 客户端/WebAssembly 模块/系统命令行工具)、Cargo.toml 依赖管理优化、unsafe Rust 代码的安全审查、Rust 与 Python/Go 代码互操作,以及最有价值的 Rust Prompt 模板。2026/3/26实战OpenClaw 与 Claude Code 协同使用实战:AI 聊天助手 + AI 编程助手的终极组合OpenClaw 与 Claude Code 协同使用的完整实战指南:两款工具的定位差异(OpenClaw=聊天AI助手框架,Claude Code=代码库直接操作的编程工具)、在 OpenClaw 中通过 exec 工具调用 Claude Code CLI(claude 命令)执行编程任务、把 OpenClaw 的 Telegram 消息转化为 Claude Code 任务(用自然语言描述→Claude Code执行→返回结果)、使用 OpenClaw Cron 定期触发 Claude Code 执行代码审查/依赖更新/测试/文档生成、CRS 代理在两者中的统一接入方案,以及常见的协同架构模式(主动触发/被动响应/定时执行)。2026/3/24实战Claude Code + NestJS 实战:用 AI 构建企业级 TypeScript 后端服务Claude Code 与 NestJS 框架深度协作实战:模块化架构设计(Module/Controller/Service/Provider)、让 Claude 生成符合 NestJS 惯例的 CRUD 模块、依赖注入系统的 AI 辅助使用、Guards 认证守卫(JWT/Role-based)、Interceptors 全局日志与请求变换、Pipes 数据验证(class-validator)、Exception Filters 统一异常处理、TypeORM 集成与数据库迁移、Swagger 文档自动生成,以及 NestJS 微服务(Microservices)架构入门。2026/3/21