Claude Code实战教程(3):CLAUDE.md——给AI装上一颗项目大脑
《从零开始的 Claude Code 实战系列教程》第 3 篇 · 公众号「麒麟剑的AI自动化Lab」连载
▲ CLAUDE.md 就像给 AI 装上了一颗项目大脑,让它真正理解你的工作
一、你是否有过这样的经历?
“我已经跟 Claude 解释了 5 遍这个项目用什么技术栈了,每次新开会话它都忘了。”
“每次让 Claude 写代码,它都用我不喜欢的风格,我得一次又一次纠正。”
“换了个新同事,他接手我的项目需要几天才能理解架构;但 Claude 每次都要我重新 briefing。”
这些问题都有一个共同的解决方案:CLAUDE.md。
二、CLAUDE.md 是什么?它怎么工作的?
CLAUDE.md 是 Claude Code 最重要的配置文件。它决定了 Claude 如何看待你的项目、遵循什么规则、如何与你沟通。
工作原理
┌─────────────────────────────────────────────────────────────┐
│ Claude Code 启动流程 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. 扫描项目根目录,找到 CLAUDE.md │
│ ↓ │
│ 2. 扫描父目录,找到上级 CLAUDE.md(向上递归) │
│ ↓ │
│ 3. 读取用户级 CLAUDE.md(~/.claude/CLAUDE.md) │
│ ↓ │
│ 4. 将以上内容合并注入到系统提示词中 │
│ ↓ │
│ 5. 每次对话开始,Claude 都能"记住"这些规则 │
│ │
├─────────────────────────────────────────────────────────────┤
│ ⚠️ 重要:系统提示词本身约占用 50 个指令槽位 │
│ Claude 有效理解上限约 150 条指令 │
│ 留给 CLAUDE.md 的空间:约 100 条规则 │
└─────────────────────────────────────────────────────────────┘加载层级
CLAUDE.md 可以放在多个层级,Claude Code 会自底向上合并:
~/.claude/CLAUDE.md ← 个人全局配置(对所有项目生效)
↑
项目根目录/CLAUDE.md ← 项目级配置(团队共享,推荐放入 git)
↑
src/components/CLAUDE.md ← 子目录级配置(仅对该目录下的代码生效)
↑
src/api/CLAUDE.md ← 更细粒度的配置最佳实践:大多数规则放在项目根目录的
CLAUDE.md即可。只有当某个子目录有特殊的编码规范时,才在该子目录下单独放一个。
▲ 多层级的配置文件,让规则可以精细化控制
三、什么样的 CLAUDE.md 是好的?
反例:配置式 CLAUDE.md(很多人这样写)
## 项目规则
- Don't use passive voice
- Always use TypeScript
- Response length: concise
- No inline comments unless asked问题:这些规则是孤立的清单,没有上下文。当规则之间冲突时(比如”concise”和”解释一个复杂的 security vulnerability”),Claude 不知道如何选择。
正例:宪法式 CLAUDE.md(推荐)
我偏向直接、专业的沟通风格,但在写面向初级工程师的文档时会更温暖一些。
代码审查评论要简洁有力,不需要过度解释基础概念。
技术栈:TypeScript + Next.js + Tailwind CSS + Zustand
所有新代码必须使用 TypeScript,禁止 any。
React 组件一律使用函数组件 + hooks,不使用 class 组件。
状态管理使用 Zustand,不在组件内直接使用 localStorage。
UI 组件来自 shadcn/ui,优先使用现有组件而非自定义样式。
生产环境禁止 console.log,使用专用的 logger 模块(src/utils/logger.ts)。优势:不仅告诉 Claude 做什么,还解释了为什么,让 Claude 在遇到边界情况时能做出符合你意图的判断。
四、CLAUDE.md 的标准结构(10 个必备章节)
章节一:项目概述
## 项目概述
这是一个电商平台的后端服务,使用 NestJS + PostgreSQL 构建。
主要功能:用户管理、商品目录、订单处理、支付集成。
目标用户:B2B 采购商家,日活约 5000。章节二:技术栈
## 技术栈
- 运行时:Node.js 20 LTS
- 框架:NestJS 10
- 数据库:PostgreSQL 16 + TypeORM
- 缓存:Redis
- 测试:Jest + Supertest
- 部署:Docker + Kubernetes章节三:项目结构
## 项目结构
src/
modules/ # 业务模块(users, products, orders, payments)
common/ # 共享工具(filters, interceptors, guards)
config/ # 配置文件
main.ts # 入口文件
test/ # 测试文件(与 src/ 结构对应)
docker/ # Docker 相关文件章节四:编码规范
## 编码规范
- 所有模块必须遵循 NestJS 的标准分层:controller → service → repository
- DTO 类放在 dtos/ 子目录,使用 class-validator 做输入校验
- 异常处理统一使用 HttpException,不在 service 层抛原生 Error
- 数据库查询使用 TypeORM QueryBuilder,避免 N+1
- API 响应统一包装为 { data, meta: { page, limit, total } }章节五:命名约定
## 命名约定
- 模块:kebab-case(user-module.ts)
- 服务类:PascalCase + Service 后缀(UserService)
- DTO:PascalCase +Dto 后缀(CreateUserDto)
- 测试文件:*.spec.ts
- 环境变量:UPPER_SNAKE_CASE章节六:关键路径与常量
## 关键路径
- 主入口:src/main.ts
- 用户认证:src/modules/auth/
- 支付逻辑:src/modules/payments/
- 数据库配置:src/config/database.ts章节七:构建与测试命令
## 常用命令
npm run build # 构建
npm run start # 本地启动
npm run test # 运行测试
npm run test:cov # 带覆盖率报告
npm run test:e2e # E2E 测试章节八:禁止事项(Don’t Do This)
## 禁止事项
- 不要在生产代码中使用 console.log,改用 logger 模块
- 不要绕过 DTO 直接用 req.body
- 不要在 service 层直接操作 HTTP 响应对象
- 不要在数据库查询中拼接 SQL 字符串(防注入)
- 不要提交包含 .env 文件的生产密钥章节九:读者画像(最重要但最常被忽略的章节)
## 代码的读者是谁
- 代码审查者:资深工程师,不需要解释基础概念,但需要清楚非显而易见的决策理由
- 文档读者:新入职的初级工程师,需要更详细的解释和上下文
- 未来维护者:6个月后的自己,希望快速理解当前代码的意图为什么这一节重要? Claude 几乎从来不是在为你一个人写代码。理解读者是谁,Claude 就能自动调整语气、详细程度和解释深度,而不需要你每次都重新指定。
章节十:安全与合规
## 安全要求
- 所有用户输入必须经过校验(class-validator)
- 密码必须使用 bcrypt 哈希,成本因子 ≥ 12
- API 端点必须经过 JWT 认证中间件保护
- 敏感信息不得出现在日志或错误消息中
- 数据库查询参数必须参数化,禁止字符串拼接五、实战:为一个真实项目编写 CLAUDE.md
项目背景
假设你有一个 Next.js + TypeScript 的前端项目,使用了 TanStack Query、ShadCN UI 和 Zustand。
完整的 CLAUDE.md
# Project Instructions
## 项目概述
SaaS 仪表盘前端,管理用户的订阅、团队成员和数据分析。
已上线产品,日均活跃用户约 2000。
## 技术栈
- Next.js 14 (App Router)
- TypeScript(严格模式)
- Tailwind CSS + ShadCN/UI
- Zustand(状态管理)
- TanStack Query(服务端状态)
- Vitest(测试)
- ESLint + Prettier
## 目录结构
app/ # Next.js App Router 页面
components/ # UI 组件
lib/ # 工具函数和 API 客户端
hooks/ # 自定义 React Hooks
services/ # API 调用封装
store/ # Zustand stores
types/ # TypeScript 类型定义
tests/ # 测试文件
## 编码规范
- 组件使用函数组件 + TypeScript 接口
- 禁止在组件内直接使用 fetch,统一走 services/ 层
- API 响应类型必须在 types/ 中明确定义
- 使用 ShadCN 现有组件,不造轮子
- 复杂 UI 逻辑提取为 custom hook
## 禁止事项
- 禁止使用 any 类型
- 禁止直接在组件中读写 localStorage
- 禁止在服务器上执行客户端-only 的代码
- 禁止提交时包含 node_modules 或 .next 缓存
## 常用命令
npm run dev # 开发服务器
npm run build # 生产构建
npm run test # 运行测试
npm run lint # 代码检查
## 代码读者
- 同事:熟悉 Next.js,不需要解释基础概念
- 新成员:需要理解项目整体架构和数据流六、如何初始化 CLAUDE.md
Claude Code 内置了一个初始化命令:
/init运行后,Claude 会扫描项目结构,自动生成一份基础 CLAUDE.md。然后你可以:
- 审阅生成内容
- 手动添加项目特有的规则
- 删除不适用的部分
- 保存到版本控制
建议:每个新项目都应该运行一次
/init,然后根据实际使用情况持续优化。
七、与 CLAUDE.md 配合使用的其他文件
SKILL.md(Skills)
当 CLAUDE.md 中的一段内容变得很长、很 Procedure 化时,应该提取为 Skill:
.claude/skills/
├── deploy/
│ └── SKILL.md # 部署流程
├── code-review/
│ └── SKILL.md # 代码审查流程
└── test/
└── SKILL.md # 测试编写规范判断标准:如果你的 CLAUDE.md 中有超过 20 行的操作步骤,考虑提取为 Skill。
settings.json(持久化设置)
{
"permissions": {
"defaultMode": "auto"
},
"model": {
"default": "claude-sonnet-5"
}
}.gitignore(排除 Claude 生成文件)
# Claude Code 生成的临时文件
.claude/
!.claude/settings.json
!.claude/CLAUDE.md八、维护 CLAUDE.md 的最佳实践
原则一:保持简短
- 目标长度:50-150 行
- 超过 150 行后,Claude 开始忽略后面的规则
- 长规则提取为 SKILL.md
原则二:渐进式披露
# ❌ 不好的做法:把所有内容堆在根 CLAUDE.md
## 数据库规范
## 前端规范
## 测试规范
## 部署规范
## API 规范
## ...(200行)
# ✅ 好的做法:根文件只放关键规则,子目录放详细规范
# 项目根/CLAUDE.md(15行)
## 项目概述
## 技术栈
## 关键规范(全局适用的)
# src/database/CLAUDE.md(10行)
## 数据库模块专用规范
# src/frontend/CLAUDE.md(10行)
## 前端模块专用规范原则三:定期回顾
每月回顾一次 CLAUDE.md:
- 删除不再适用的规则
- 补充新发现的常见错误
- 合并重复的规则
原则四:团队共享
把 CLAUDE.md 纳入版本控制,让团队成员共享同一套规范:
# 在团队项目中,CLAUDE.md 应该在根目录并提交到 git
git add CLAUDE.md
git commit -m "docs: 更新项目规范和编码约定"九、常见错误
| 错误 | 后果 | 修正 |
|---|---|---|
| 规则过多(>150条) | Claude 开始忽略后面的规则 | 提取为 SKILL.md |
| 只列清单没有解释 | Claude 在边界情况时做出错误判断 | 补充”Why” |
| 把文档内容放进去 | 浪费上下文空间 | 用 @ 引用外部文档 |
| 规则之间矛盾 | Claude 随机选择执行哪条 | 删除矛盾规则 |
| 写得太泛泛而谈 | 没有实际指导作用 | 给出具体例子 |
十、本章小结
| 要点 | 说明 |
|---|---|
| CLAUDE.md 的作用 | 为 Claude 提供项目级上下文和规则 |
| 宪法式 > 清单式 | 解释 Why 比列出 What 更重要 |
| 10 个必备章节 | 概述、技术栈、结构、规范、命令、禁止事项、读者画像、安全等 |
| 层级加载 | 个人级 → 项目级 → 子目录级,自底向上合并 |
| 长度控制 | 保持在 50-150 行,超出部分提取为 Skill |
| 定期维护 | 每月回顾,删除过时规则 |
下期预告(第 4 篇):Git不再只是命令行——内置Git工作流全攻略,让你用自然语言管理分支、提交、PR 和冲突解决
关注本系列,从入门到专家,系统掌握 Claude Code 的全部技能。