CLAUDE.md 是 Claude Code 在每次 Session 开始前必读的文件。写好它,Claude Code 立刻变成了解你代码库的资深开发者;不写它,每次都要重新解释一遍项目背景。
根据 r/ClaudeAI 社区、shanraisshan/claude-code-best-practice 仓库(84 条经验)和 Anthropic 官方文档,这是目前最完整的 CLAUDE.md 模板。
为什么 CLAUDE.md 如此重要
没有 CLAUDE.md 时:
- Claude Code 猜测你的规范(有时猜错)
- 每次 Session 开始要花时间解释背景
- 可能重新实现你已经有的功能(auth、验证库等)
- 可能修改你不想让它碰的文件
有了好的 CLAUDE.md:
- Session 立即开始,无需额外解释
- 违反规范的情况大幅减少(来自 UX Planet 2026 年数据:减少约 80% 的首次错误)
- Claude Code 自动使用你已有的 auth、验证等基础设施
- 你的时间花在审查输出上,而不是纠正假设
完整的 10 段模板
把下面这个模板复制到项目根目录的 CLAUDE.md,删除不适用的部分:
# [项目名称]
## 1. 项目概述
[2-3 句话说明这是什么项目、谁在用、解决什么问题]
示例:这是一个面向工程团队的 B2B 项目管理工具。
包含项目、任务、Sprint 管理和 GitHub 集成。
用户分为团队成员和管理员,通过 Stripe 付费订阅。
## 2. 技术栈
- 运行时: Node.js 22 / Python 3.12 / [你的运行时]
- 框架: Next.js 16(App Router,不是 Pages Router)
- 数据库: PostgreSQL(通过 Prisma ORM,不用裸 SQL)
- 认证: Clerk / Auth.js / JWT
- 样式: Tailwind CSS v4(不是 v3,配置方式已变)
- 测试: Jest + Playwright / Vitest
- 包管理: bun / pnpm / npm
(版本很重要——API 会变,Claude Code 的训练数据包含旧版本)
## 3. 核心命令
- 启动开发服务器: `npm run dev`
- 运行测试: `npm run test`
- 类型检查: `npm run typecheck`
- 构建: `npm run build`
- 数据库迁移: `npx prisma db push`(开发)/ `npx prisma migrate deploy`(生产)
- Lint: `npm run lint`
(这部分写了,Claude Code 才会自动运行测试验证改动)
## 4. 项目结构
src/
app/ # Next.js App Router 页面和 API 路由
components/ # 可复用 UI 组件
lib/ # 业务逻辑、工具函数、SDK 封装
hooks/ # 自定义 React Hooks
types/ # TypeScript 类型定义
prisma/
schema.prisma # 数据库 Schema
(目录描述让 Claude Code 知道新文件放哪,不用读 50 个文件推断)
## 5. 代码规范
- TypeScript strict 模式已开启,禁止使用 `any`
- 使用命名导出,不用默认导出(页面组件除外)
- 所有 API 路由通过 `src/lib/auth.ts` 做认证,不要重复实现
- 数据库查询放在 `src/lib/db/`,不要内联在 API 路由里
- 输入验证统一使用 Zod
- 只用 Tailwind 工具类,除非绝对必要不写自定义 CSS
- 文件命名:全部使用 kebab-case
## 6. 禁止修改区域(最重要的安全措施)
- src/lib/auth/ —— 认证逻辑单独维护,不要改
- prisma/migrations/ —— 永远不要直接修改 migration 文件
- .env.local —— 不要在代码里读写密钥
- src/lib/stripe/ —— Stripe 集成由另一个团队负责
## 7. 测试规范
- 单元测试:src/lib/ 下的工具函数
- 集成测试:API 路由
- E2E 测试:仅核心用户流程(结账、认证、核心功能)
- 完成任务前必须运行 `npm run test`
- 修复 Bug 时不要跳过测试——测试也要修
## 8. 数据库规范
- 不要删除表或字段——先标记为 deprecated
- 新表必须包含:id(UUID)、created_at、updated_at
- 多表写入使用数据库事务
- Prisma schema 中必须显式声明外键
## 9. 代码风格
- 函数最长 20 行——超过则提取为辅助函数
- 文件最长 200 行——超过则拆分为模块
- 优先组合而非继承
- 注释解释"为什么",而不是"是什么"
## 10. 当前工作(每次大任务前更新)
正在做:Stripe 订阅管理
下一步:邮件通知系统
最近完成:用户资料编辑各段详解:怎么写才有效
第 1 段:项目概述
目标:让 Claude Code 知道它在什么类型的代码库里。
不好的写法(像宣传文案):
这是一个利用 AI 技术改变团队协作方式的创新 SaaS 平台。
好的写法(像事实描述):
这是面向工程团队的 B2B 项目管理工具。
包含项目、任务、Sprint 和 GitHub 集成。
用户分为团队成员和管理员,付费用户通过 Stripe 订阅。
第 2 段:技术栈
版本号很重要:
Next.js 16(App Router,不是 Pages Router)——不写这个,Claude Code 可能生成 Pages Router 代码Tailwind v4(不是 v3——配置方式已变)——v3 和 v4 配置完全不同Bun 作为包管理器(不是 npm)——避免生成 npm 命令
第 3 段:核心命令
最被忽视的段落,但影响最大。
不写这段,Claude Code 改了代码但不知道怎么运行测试验证。写了之后,它会自动:
- 修改代码
- 运行测试
- 如果测试失败,自动修复
- 通过后才报告完成
第 6 段:禁止修改区域
最重要的安全保护。
Claude Code 会尊重这个列表。如果某个任务需要修改禁区内的文件,它会先警告你,而不是直接改。
常见禁区:
- 稳定的认证实现
- Migration 历史
- 有硬编码配置的文件
- 需要特殊知识的第三方集成代码
高级技巧:让 CLAUDE.md 更强大
技巧 1:第 10 段每次更新
每次开始新任务前,更新"当前工作":
## 当前工作
正在做:实现用户通知功能(WebSocket + 站内信 + 邮件)
注意:notifications 表的 Schema 已经在 PR #234 里,等 merge
不要碰:src/lib/ws/ 正在被另一个同事修改
活跃分支:feature/notifications这让每次 Session 都有精确的任务上下文,不是通用的项目背景。
技巧 2:链接到详细文档
对于复杂集成,在 CLAUDE.md 里链接到专门的说明文档:
## Stripe 集成
详细文档:参见 src/lib/stripe/STRIPE_DOCS.md
测试卡:https://stripe.com/docs/testing
重要:所有 Webhook 必须通过 src/lib/stripe/webhook-validator.ts 验证技巧 3:标记废弃代码
如果代码库有正在迁移的部分:
## 废弃警告
src/lib/legacy-auth/ 正在被 src/lib/auth/ 替代
永远不要在 legacy-auth/ 里添加新代码
新的认证代码统一放在 src/lib/auth/技巧 4:用 .claude/rules/ 补充领域规则
CLAUDE.md 写项目级通用规则。领域专用规则放在 .claude/rules/:
.claude/rules/
├── api-routes.md # API 路由写法规范
├── database.md # 数据库迁移和查询规范
├── testing.md # 测试规范
└── components.md # 组件规范
Claude Code 在处理 API 路由时读 api-routes.md,不是写按钮样式的时候。按需加载,保持上下文干净。
CLAUDE.md 的"黄金规则":删
写完后,过一遍黄金规则:
删除所有不会让 Claude Code 犯错的内容。
只保留:
- 不写会犯错的规范(
必须使用 Zod而不是推荐使用 Zod) - 它不可能猜到的项目特定信息(你的目录结构、禁区)
- 版本号和具体实现(
App Router而不是Next.js)
删掉:
- 通用最佳实践(它已经知道了)
- 废话和解释(没有操作意义的内容)
- 过长的背景故事
目标:精准信息密度,不是文档完整性。
来源:blink.new CLAUDE.md 最佳实践指南 | shanraisshan/claude-code-best-practice | Anthropic 官方文档 | 整理:ClaudeEagle