Claude Code: CLAUDE.md 使用指南

最后更新:2026-08-31

CLAUDE.md 是 Claude Code 的"项目说明书"——写得好,Claude Code 就像一个熟悉项目的老员工;写得差,它就像一个什么都不懂的新人。

💡 提示:CLAUDE.md 的核心原则是"显式优于隐式"——把你认为理所当然的项目约定写出来,因为 Claude Code 不会猜。

📋 前置知识:第八章 基础用法

1. 你将学到


2. CLAUDE.md 语法与结构

(1) 核心结构

MARKDOWN
# CLAUDE.md

## 项目概述
[一句话描述项目是什么、做什么]

## 技术栈
[语言、框架、数据库、工具链]

## 常用命令
[构建、测试、部署、开发命令]

## 代码约定
[命名规范、文件组织、风格要求]

## 约束与限制
[不能做什么、必须做什么]

## 已知问题
[需要特别注意的技术债和坑]

(2) 指令类型

类型 示例 优先级
必须做 "所有 API 必须有错误处理"
不能做 "不要直接修改数据库表"
建议做 "优先使用函数式风格"
参考信息 "项目使用 Monorepo 结构"

▶ 示例 1: 高质量 CLAUDE.md

MARKDOWN
# CLAUDE.md

## 项目概述
SaaS 计费平台后端,处理订阅管理、发票生成和支付集成。

## 技术栈
- Node.js 20 + TypeScript 5.3
- Express 4.18 + middleware chain
- Prisma 5.x (PostgreSQL)
- Redis (缓存 + 队列)
- Jest + Supertest (测试)

## 常用命令
- `npm run dev` — 启动开发服务器 (port 3000)
- `npm test` — 运行全量测试
- `npm test -- --watch` — 监视模式
- `npm run lint` — ESLint 检查
- `npx prisma migrate dev` — 数据库迁移

## 代码约定
- Service 层只处理业务逻辑,不直接访问 HTTP 对象
- Controller 层负责请求/响应转换
- 所有数据库操作通过 Repository 模式
- 错误使用 AppError 类,包含 statusCode 和 code
- API 响应格式:`{ success: boolean, data: T, error?: string }`

## 约束
- ❌ 禁止直接使用 pg 客户端,必须用 Prisma
- ❌ 禁止在 Service 层访问 req/res
- ❌ 禁止硬编码密钥和凭证
- ✅ 每个 API endpoint 必须有集成测试
- ✅ 所有金额使用 cents(整数),避免浮点误差

## 已知问题
- PaymentService.processRefund 有并发问题(见 ISSUE-342)
- InvoiceService.generatePDF 在大量项目时性能差(见 ISSUE-156)

3. 分层配置策略

(1) 三层配置体系

TEXT 📖 仅展示
~/.claude/CLAUDE.md          # 全局:个人偏好
项目根/CLAUDE.md             # 项目:团队约定
项目根/src/api/CLAUDE.md     # 目录:局部指令
层级 作用域 典型内容 优先级
全局 所有项目 个人编码风格偏好 最低
项目 当前项目 技术栈、命令、约束
目录 子目录 局部特定指令 最高

(2) 全局 CLAUDE.md

MARKDOWN
<!-- ~/.claude/CLAUDE.md -->
# 全局偏好

## 代码风格
- 使用 TypeScript 严格模式
- 优先 const,避免 let
- 函数不超过 20 行
- 添加 JSDoc 注释

## 测试偏好
- 使用 describe/it 风格
- 每个 test 独立,不依赖执行顺序
- mock 外部依赖,不 mock 内部模块

(3) 目录级 CLAUDE.md

MARKDOWN
<!-- src/api/CLAUDE.md -->
# API 模块约定

## 路由注册
- 所有路由在 index.ts 统一注册
- 中间件顺序:auth → rateLimit → validate → handler

## 响应格式
- 成功:{ success: true, data: T }
- 失败:{ success: false, error: { code, message } }

## 禁止
- ❌ 不要在 handler 中直接写业务逻辑
- ❌ 不要跳过参数验证

▶ 示例 2: Monorepo 分层配置

TEXT 📖 仅展示
my-monorepo/
├── CLAUDE.md                 # 全局:Monorepo 结构和公共命令
├── packages/
│   ├── web/
│   │   └── CLAUDE.md         # 前端:React 约定
│   ├── api/
│   │   └── CLAUDE.md         # 后端:API 约定
│   └── shared/
│       └── CLAUDE.md         # 共享:纯逻辑,无 I/O

4. 编写最佳实践

(1) 有效指令 vs 无效指令

无效 有效 原因
"写好代码" "函数不超过 20 行,圈复杂度 < 10" 可量化
"注意安全" "所有用户输入必须 sanitize,禁止拼接 SQL" 具体可执行
"遵循最佳实践" "使用 Repository 模式,Service 不直接访问 DB" 明确模式
"代码要快" "数据库查询必须加索引,N+1 查询用 DataLoader" 有具体方法

(2) 避坑清单

陷阱 示例 正确做法
太模糊 "保持代码整洁" 写具体规范
太冗长 500 行的 CLAUDE.md 精简到核心约定
自相矛盾 "用 REST"又"用 GraphQL" 保持一致
过时 还在写"使用 Express 3.x" 随项目更新
无关信息 写团队组织架构 只写影响代码的

5. 动态更新 CLAUDE.md

▶ 示例 3: 让 Claude Code 维护 CLAUDE.md

TEXT 📖 仅展示
> 根据最近的代码变更,更新 CLAUDE.md

Claude Code:
  → Reading recent commits (last 2 weeks)
  → Reading current CLAUDE.md
  → Changes detected:
    1. Migrated from Express to Fastify
    2. Added Redis caching layer
    3. Changed test framework from Jest to Vitest

  → Updating CLAUDE.md:
    - Tech stack: Express → Fastify
    - Commands: npm test → npm run test (vitest)
    - Added: Redis caching conventions
    - Updated: API response format (Fastify style)

  CLAUDE.md updated ✓

6. 综合示例:从零编写完整 CLAUDE.md

TEXT 📖 仅展示
# Alice 为新项目编写 CLAUDE.md

> 分析项目并生成 CLAUDE.md

Claude Code:
  → Reading package.json, tsconfig.json
  → Scanning src/ directory structure
  → Reading ESLint and Prettier config
  → Reading existing test files for patterns
  → Generating CLAUDE.md...

# Alice 手动补充业务约定:

## 业务规则
- 订阅状态:active/past_due/canceled/expired
- 订阅降级:立即生效,不退差价
- 计费周期:monthly/yearly,按自然月/年
- 退款策略:7 天内全额退款,超过 7 天按比例退款

## 数据约束
- 金额使用 cents (integer)
- 日期使用 ISO 8601
- 货币使用 ISO 4217 (USD, EUR, CNY)

❓ 常见问题

Q CLAUDE.md 多长合适?
A 50-150 行最佳。太短信息不够,太长 Claude Code 可能忽略部分内容。核心约定优先,参考信息可少写。
Q CLAUDE.md 里的指令 Claude Code 一定会遵守吗?
A 大部分会,但不是 100%。高优先级指令("禁止""必须")遵守率高,建议性指令可能被忽略。关键约束用 ❌ 和 ✅ 标记。
Q 多个 CLAUDE.md 会冲突吗?
A 会。目录级覆盖项目级,项目级覆盖全局。如果冲突,以更具体的为准。
Q 敏感信息能写进 CLAUDE.md 吗?
A 绝对不行。CLAUDE.md 会被提交到 git,API Key、密码等敏感信息用环境变量。
Q CLAUDE.md 支持条件逻辑吗?
A 不支持编程逻辑。只能写静态文本指令。条件判断由 Claude Code 自行决定。
Q 什么时候该更新 CLAUDE.md?
A 技术栈变更、新增约定、发现 Claude Code 反复犯错时,都应该更新。

📖 小节


📝 作业

  1. 基础题(难度⭐):为你的项目编写一个 50 行的 CLAUDE.md,包含项目概述、技术栈和常用命令。
  2. 进阶题(难度⭐⭐):实现三层 CLAUDE.md 配置(全局+项目+目录),测试不同层级的指令优先级。
  3. 挑战题(难度⭐⭐⭐):故意写模糊指令和精确指令,对比 Claude Code 的执行差异,总结 CLAUDE.md 编写的黄金法则。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏