Skip to content

3.11 大型代码库处理

预计耗时:15 分钟

本关任务简报

一个真实项目往往有几百甚至几千个文件。Claude 每次启动都是"从零开始"——它不知道你的项目架构、不知道哪个文件负责什么、不知道你们有什么约定。

如果每次都把所有代码都塞进去,token 会爆炸;如果什么都不给,Claude 会乱猜。

这一关讲的是如何让 Claude 在大型项目里工作得像一个真正了解项目的搭档:靠 CLAUDE.md 提供项目地图,靠精准的文件引用控制上下文,靠任务拆分避免单次会话处理过多。


通关奖励:解锁以下技能

  • 🗺️ 能用 CLAUDE.md 给 Claude 一份让它快速定向的项目地图
  • 🎯 能精准引用文件和目录,而不是把整个项目都丢进去
  • ✂️ 掌握大型任务的拆分原则,避免单次会话失控
  • 🤖 知道什么时候该用多 Agent 并行处理不同模块

开始前先检查装备

前置知识说明
2.7 CLAUDE.md 配置 →这一关的核心工具是 CLAUDE.md,不了解它的基础用法就无法建"项目地图"
2.5 文件引用与上下文 →@目录/ 引用方式是大型代码库的核心操作

机制解析

为什么"把所有文件都给它"行不通

Claude Code 有上下文窗口限制。一个 200 文件、每文件 200 行的项目,总量超过 10 万行代码——这远超单次对话能处理的量。

更重要的是:你也不需要 Claude 看所有文件。大多数任务只涉及项目的某个局部,其余的代码对这个任务没有意义。给得越多,干扰越大,成本越高。

关键原则:给 Claude 刚好够它完成这个任务的上下文,不多也不少。


技术一:CLAUDE.md 作为项目地图

CLAUDE.md 是每次启动都会自动读取的文件。对于大型项目,它最重要的用途之一是告诉 Claude 这个项目的结构:哪个目录放什么、核心模块在哪里、有哪些约定需要遵守。

一个实用的大型项目 CLAUDE.md 模板

markdown
## 项目结构速览

src/
├── api/          # HTTP 路由层,只处理请求/响应,不写业务逻辑
├── services/     # 业务逻辑层,所有核心计算和规则在这里
├── models/       # 数据模型定义(TypeORM Entity)
├── utils/        # 工具函数,必须是纯函数,不能有副作用
└── config/       # 环境配置,从 .env 读取,不硬编码

## 关键文件

- src/app.ts          ← 应用入口,路由注册在这里
- src/config/db.ts    ← 数据库连接配置
- docs/ADR/           ← 架构决策记录,涉及架构改动前必读

## 约定

- 所有异步函数必须有错误处理,禁止裸 await
- 数据库操作只能在 services/ 层,api/ 不能直接查库
- 新增 API 必须同步更新 docs/api-spec.md

有了这份说明,Claude 可以在不读所有代码的情况下理解项目的整体结构,在需要读某个文件之前知道去哪里找。

@import 拆分过长的 CLAUDE.md

大型项目的约定一多,CLAUDE.md 容易变得又长又杂。可以把它拆成几个文件,在主 CLAUDE.md 里用 @路径/文件.md 引入,比如写上 @docs/architecture.md@docs/conventions.md,Claude 会自动把这些文件的内容并进来。拆分后各管一块,维护更清爽。详见 2.7 CLAUDE.md 配置 →


技术二:精准的文件引用策略

按目录引用,而不是一个个文件列举:

text
@src/services/payment/    ← 引用整个支付服务目录
请帮我给这个模块添加退款功能。

先确认再深入——不确定问题在哪时,先让 Claude 探索:

text
这个项目里负责用户认证的文件在哪里?
帮我找一下,不需要读完所有文件,先告诉我目录结构。

Claude 会用 GlobGrep 搜索,找到相关文件后再精确引用,而不是把整个 src/ 都读一遍。

按关键词定位

text
@src/   ← 只扫描目录结构
搜索 src/ 下所有涉及"payment"的文件,列出来。

技术三:大型任务的拆分原则

遇到"重构整个认证模块"这类大任务,不要一次性丢给 Claude。按以下原则拆:

按文件/模块拆

任务:重构认证模块
拆法:
  会话1:重构 auth.service.ts(核心逻辑)
  会话2:更新 auth.controller.ts(适配新接口)
  会话3:更新测试文件
  会话4:更新文档

按依赖顺序拆:先改被依赖的底层,再改上层。每个会话结束时确认改动没有破坏已有功能,再开下一个会话。

把跨会话的状态记在 CLAUDE.md 里:每完成一个阶段,更新 CLAUDE.md 里的"当前状态"或"重构进度",下一个会话启动时 Claude 能接续上下文。


技术四:用多 Agent 并行探索

当你需要同时了解项目几个不相关的模块时,多 Agent 比顺序探索更快:

text
我需要在这个项目里同时了解两件事:
1. 当前的日志系统是如何工作的
2. 当前的错误处理策略是什么

请并行处理这两个问题,分别探索对应的代码,给我各自的分析报告。

Claude 会启动两个子 Agent 分别探索,比你先问日志再问错误处理快得多。


技术五:了解 Claude Code 处理大型任务的上限

Claude Code 对单次任务的处理是有边界的:

  • 上下文窗口:当前主流模型约 200K token,一个中等规模项目的核心文件会逼近这个边界
  • 工具调用轮次:单次会话里 Claude 的工具调用次数有上限,超过后它会停下来说"任务太大了"
  • 注意力漂移:上下文越接近满载,Claude 越容易"忘记"早期的约定或出现前后矛盾

处理超大型任务的原则:不要试图让 Claude 在一次会话里吃完整头大象——按模块拆分后,每个会话只处理一个边界清晰的子任务,完成后提交 git,再开新会话处理下一段。CLAUDE.md 里记录跨会话的进度状态,让每次新会话都能快速接续上下文。


技术六:用 /compact 保持长会话活力

在长时间的大型项目工作中,/compact 比 /clear 更合适:

text
/compact

压缩后 Claude 保留对当前工作状态的记忆,同时释放大量 token 空间。当你感觉 Claude 开始忘东忘西、或者响应变慢,就是该 /compact 的时候了。

想知道当前上下文被什么占满了,先用 /context 看一眼——它会列出上下文窗口里各部分(系统提示、CLAUDE.md、文件、对话历史等)各占多少,帮你判断是该 /compact、还是该精简引用的文件。


开始闯关

目标:给你的项目写一份"地图级" CLAUDE.md,验证它能帮 Claude 快速定向。

第 1 步:分析项目结构

在当前项目目录运行:

text
帮我分析这个项目的目录结构,总结各主要目录的职责,输出一个 3-5 行的结构说明。

第 2 步:把说明写进 CLAUDE.md

把 Claude 输出的结构说明整理后加入 CLAUDE.md 的开头。可以直接告诉 Claude:

text
把刚才的结构说明格式化后,追加写入当前目录的 CLAUDE.md 文件。

第 3 步:验证地图效果

新开一个会话(/clear),然后问:

text
如果我想修改用户登录的验证逻辑,应该从哪个文件开始看?

如果 Claude 能直接给出具体文件路径而不是让你"自己找找看",说明 CLAUDE.md 地图生效了。


通关检定

  • [ ] 知道为什么不能把整个项目都塞给 Claude
  • [ ] CLAUDE.md 里包含了项目结构说明和关键文件索引
  • [ ] 能用 @目录/ 按模块引用,而不是逐文件手动列举
  • [ ] 知道大型任务应该按模块/依赖顺序拆成多个会话
  • [ ] 理解 /compact 在长会话中的价值

全部点亮就算通关 ✓


卡关了?翻车指南在这

每次新会话 Claude 都要重新探索项目结构,很耗时间

根本原因:CLAUDE.md 里没有写清楚结构。把最常被问到的"这个功能在哪个文件"逐一加进 CLAUDE.md 的关键文件列表——问一次,记一次,之后就不用重复了。

Claude 读了很多文件但最后给出的答案还是不对

上下文太多时,Claude 容易在信息里"迷路"。试试反过来:先让 Claude 提出它的诊断假设,再针对假设精确引用对应的文件去验证,而不是一次性给它十几个文件。

跨模块的改动怎么安全进行

在正式改动前,让 Claude 先做依赖分析:

text
@src/models/user.ts
如果我修改这个文件里的 User 接口,哪些其他文件会受影响?列出来。

然后按影响范围从小到大逐步改,每步提交一次 git,保留回滚点。


下一关

3.12 提示词进阶 →

结构化的项目管理之外,还有一层更本质的问题:如何跟 Claude 沟通才能稳定拿到高质量的输出?下一关讲任务拆解和提示词设计的核心方法论。

面向公开用户维护,内容基于 Claude Code 官方文档与真实使用经验整理