一份好的配置文件,胜过十次重复解释
写在前面
说实话,你有没有遇到过这样的情况:
你:帮我重构一下登录模块
Claude:好的,我创建了新的登录组件...
你:等等,我们项目用的是 Vue,不是 React
Claude:哦,我重新写...
你:还有,我们组件命名用 PascalCase
Claude:我改一下...
你:对了,测试文件要放在 __tests__ 目录
一次又一次地解释项目规范,烦不烦?
CLAUDE.md 就是解决这个问题的。
它是项目的"说明书",告诉 Claude 你的项目是什么、用什么规范、有什么禁忌。配置好之后,Claude 就能"按规矩办事"。
一、五层记忆体系:Claude 怎么记住你的偏好
1.1 内存层级架构
Claude Code 有一个五层记忆体系,从组织到个人,层层递进:
┌─────────────────────────────────────────────────────────────────┐
│ Claude Code 五层记忆体系 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 优先级 类型 位置 共享范围 │
│ ─────────────────────────────────────────────────────────── │
│ │
│ 高 企业策略 /etc/claude-code/ 全公司 │
│ CLAUDE.md │
│ │
│ 项目内存 ./CLAUDE.md 项目团队 │
│ 或 ./.claude/CLAUDE.md │
│ │
│ 项目规则 ./.claude/rules/*.md 项目团队 │
│ (模块化、可按路径匹配) │
│ │
│ 用户内存 ~/.claude/CLAUDE.md 仅你自己 │
│ (所有项目通用) │
│ │
│ 低 项目内存(本地) ./CLAUDE.local.md 仅你自己 │
│ (当前项目专用) │
│ │
└─────────────────────────────────────────────────────────────────┘
1.2 各层级的用途
| 层级 | 适合放什么内容 | 例子 |
|---|---|---|
| 企业策略 | 组织级别的规范、安全要求 | 禁止将密钥提交到代码、必须使用指定框架 |
| 项目内存 | 项目架构、团队约定 | 技术栈、目录结构、常用命令 |
| 项目规则 | 模块化规则、特定文件约定 | API 开发规范、测试规范、安全要求 |
| 用户内存 | 个人编码偏好 | 缩进风格、个人工具配置 |
| 项目内存(本地) | 个人对当前项目的偏好 | 沙箱地址、测试数据 |
1.3 加载顺序和优先级
┌────────────────────────────────────────────────────────────┐
│ 内存加载流程 │
├────────────────────────────────────────────────────────────┤
│ │
│ 1. 企业策略(最先加载,作为基础) │
│ ↓ │
│ 2. 用户内存(个人偏好覆盖企业策略) │
│ ↓ │
│ 3. 项目内存(项目规则覆盖用户偏好) │
│ ↓ │
│ 4. 项目规则(与项目内存同级,模块化组织) │
│ ↓ │
│ 5. 项目内存-本地(最具体,最高优先级) │
│ │
│ 原则:越具体的规则,优先级越高 │
│ │
└────────────────────────────────────────────────────────────┘
二、从零开始:创建你的第一个 CLAUDE.md
2.1 最简配置
在项目根目录创建 CLAUDE.md:
# 项目说明
## 技术栈
- React 18 + TypeScript
- TailwindCSS
- Vite
## 常用命令
- npm run dev - 启动开发服务器
- npm run build - 构建
- npm test - 运行测试
就这么简单。Claude 每次启动都会读取这个文件。
2.2 一个完整的示例
# 电商平台项目说明
## 技术栈
- 前端:Next.js 14 + TypeScript + TailwindCSS
- 后端:Node.js + Express + PostgreSQL
- ORM:Prisma
## 目录结构
src/
├── components/ # React 组件
├── pages/ # Next.js 页面
├── lib/ # 工具函数
├── hooks/ # 自定义 Hooks
└── types/ # TypeScript 类型定义
## 代码规范
- 使用 2 空格缩进
- 组件文件用 PascalCase 命名(如 `UserProfile.tsx`)
- 工具函数用 camelCase 命名(如 `formatDate.ts`)
- 每个组件都要有对应的测试文件
## 禁止事项
- 不要直接修改 `src/generated` 目录
- 所有 API 调用必须经过 `src/lib/api-client.ts`
- 不要在组件中直接使用 `fetch`,使用封装好的 API 客户端
## 常用命令
- `npm run dev` - 启动开发服务器
- `npm run build` - 构建生产版本
- `npm test` - 运行测试
- `npm run lint` - 代码检查
- `npx prisma studio` - 打开数据库管理界面
## Git 工作流
- 功能分支命名:`feature/功能名`
- 修复分支命名:`fix/问题描述`
- 提交信息格式:`type(scope): 描述`
- type: feat|fix|docs|style|refactor|test|chore
2.3 效果验证
配置完成后,启动 Claude Code:
claude
然后问:
> 帮我创建一个商品列表组件
Claude 会自动:
- 使用 TypeScript
- 遵循 PascalCase 命名
- 放在
src/components/目录 - 遵循你的代码风格
三、高级技巧:用 @import 引入外部文件
3.1 为什么需要 import?
有时候项目信息分散在多个文件里:
README.md有项目概述package.json有依赖和脚本docs/有详细文档
全部复制到 CLAUDE.md 会导致:
- 信息冗余
- 容易忘记同步更新
3.2 使用 @import 语法
CLAUDE.md 支持 @path/to/import 语法:
# 项目说明
## 项目概述
参见 @README.md
## 可用命令
参见 @package.json
## Git 工作流
参见 @docs/git-workflow.md
## 补充说明
- 所有 API 必须有错误处理
- 测试覆盖率要求 80% 以上
3.3 导入个人配置
你可以导入用户目录下的文件,实现"个人偏好不提交到仓库":
# 项目说明
## 团队规范
(这里写团队共同遵守的规则)
## 个人偏好
@~/.claude/my-project-preferences.md
这样每个团队成员可以有自己的个人偏好文件,而不会产生冲突。
3.4 import 的限制
┌────────────────────────────────────────────────────────────┐
│ @import 注意事项 │
├────────────────────────────────────────────────────────────┤
│ │
│ ✅ 支持: │
│ • 相对路径:@./README.md │
│ • 绝对路径:@/path/to/file.md │
│ • 用户目录:@~/.claude/config.md │
│ • 递归导入:最多 5 层 │
│ │
│ ❌ 不支持: │
│ • 代码块内的导入:`@anthropic-ai/claude-code` │
│ • 代码跨度内的导入 │
│ │
│ 💡 提示:使用 /memory 命令查看实际加载了哪些文件 │
│ │
└────────────────────────────────────────────────────────────┘
四、模块化规则:用 .claude/rules/ 组织复杂项目
4.1 为什么需要模块化?
对于大型项目,单个 CLAUDE.md 会变得庞大而难以维护:
❌ 一个大文件的问题:
- 难以找到特定规则
- 团队协作容易冲突
- 规则职责不清晰
解决方案:用 .claude/rules/ 目录拆分规则。
4.2 基本结构
your-project/
├── .claude/
│ ├── CLAUDE.md # 主配置文件
│ └── rules/
│ ├── code-style.md # 代码风格
│ ├── testing.md # 测试规范
│ ├── api.md # API 开发规范
│ └── security.md # 安全要求
4.3 规则文件示例
code-style.md:
# 代码风格规范
## 命名约定
- 组件:PascalCase(如 `UserProfile.tsx`)
- 函数:camelCase(如 `getUserById`)
- 常量:UPPER_SNAKE_CASE(如 `MAX_RETRY_COUNT`)
- 文件:与导出的主要名称一致
## 格式化
- 使用 2 空格缩进
- 语句末尾不加分号
- 字符串优先使用单引号
- 最大行宽 100 字符
## 注释
- 公共函数必须有 JSDoc 注释
- 复杂逻辑必须有行内注释说明
- TODO 注释格式:`// TODO(username): 描述`
testing.md:
# 测试规范
## 测试文件位置
- 单元测试:与源文件同目录,`.test.ts` 后缀
- 集成测试:`tests/integration/` 目录
- E2E 测试:`tests/e2e/` 目录
## 测试覆盖率要求
- 整体覆盖率:≥ 80%
- 核心业务逻辑:≥ 90%
- 工具函数:≥ 70%
## 测试命名
- describe 块:描述被测试的模块/函数
- it 块:描述测试场景,使用"应该..."句式
4.4 路径特定规则
最强大的功能:规则可以限定到特定文件路径。
使用 YAML 前置事项(frontmatter):
---
paths: src/api/**/*.ts
---
# API 开发规范
这些规则只在处理 `src/api/` 目录下的 TypeScript 文件时生效。
## 通用要求
- 所有 API 端点必须包含输入验证
- 使用标准错误响应格式
- 必须包含 OpenAPI 文档注释
## 错误处理
```typescript
// 标准错误响应格式
{
"error": {
"code": "ERROR_CODE",
"message": "Human readable message",
"details": {}
}
}
### 4.5 Glob 模式语法
┌────────────────────────────────────────────────────────────┐
│ paths 字段 Glob 模式 │
├────────────────────────────────────────────────────────────┤
│ │
│ 模式 匹配 │
│ ───────────────────────────────────────────── │
│ /*.ts 任何目录的 TypeScript 文件 │
│ src// src 目录下的所有文件 │
│ .md 项目根目录的 Markdown 文件 │
│ src/components/.tsx 特定目录的 React 组件 │
│ │
│ 组合模式: │
│ src/**/.{ts,tsx} TypeScript 和 TSX 文件 │
│ {src,lib}/*/.ts src 或 lib 下的 TS 文件 │
│ │
└────────────────────────────────────────────────────────────┘
### 4.6 规则组织最佳实践
.claude/rules/
├── frontend/ # 前端规则
│ ├── react.md # React 组件规范
│ └── styles.md # CSS/Tailwind 规范
├── backend/ # 后端规则
│ ├── api.md # API 开发规范
│ └── database.md # 数据库操作规范
├── testing/ # 测试规则
│ ├── unit.md # 单元测试
│ └── e2e.md # E2E 测试
└── general.md # 通用规则
---
## 五、用户级配置:个人偏好跨项目共享
### 5.1 创建用户级配置
在 `~/.claude/CLAUDE.md` 创建你的个人偏好:
```markdown
# 个人编码偏好
## 代码风格
- 偏好函数式编程风格
- 优先使用 const,避免 let
- 喜欢提前 return,减少嵌套
## 注释风格
- 喜欢"为什么"而不是"是什么"的注释
- 复杂逻辑必须有注释
## 常用工具
- 使用 pnpm 而不是 npm
- 使用 vitest 而不是 jest
5.2 用户级规则
你也可以在 ~/.claude/rules/ 创建个人规则:
~/.claude/rules/
├── preferences.md # 个人偏好
└── workflows.md # 常用工作流
5.3 优先级规则
项目规则 > 用户规则 > 企业策略
这意味着:
- 项目的特定规范会覆盖你的个人偏好
- 你的个人偏好会覆盖企业通用规范
- 企业策略是最基础的约束
六、实战案例:不同类型项目的 CLAUDE.md 模板
6.1 前端项目
# 前端项目配置
## 技术栈
- React 18 + TypeScript
- Vite
- TailwindCSS
- React Query
## 组件规范
- 组件放在 `src/components/`
- 页面组件放在 `src/pages/`
- 每个组件一个文件夹,包含:
- `index.tsx` - 组件实现
- `styles.ts` - 样式(如需要)
- `types.ts` - 类型定义
- `index.test.tsx` - 测试
## 状态管理
- 服务端状态:React Query
- 客户端状态:Zustand
- 表单状态:React Hook Form
## 禁止
- 不要在组件中直接调用 fetch
- 不要使用 inline styles
- 不要在渲染中定义函数
6.2 后端 API 项目
# 后端 API 配置
## 技术栈
- Node.js + Express
- TypeScript
- Prisma ORM
- PostgreSQL
## API 规范
- RESTful 风格
- 使用 `/api/v1/` 前缀
- 统一错误响应格式
- JWT 认证
## 目录结构
src/
├── controllers/ # 控制器
├── services/ # 业务逻辑
├── repositories/ # 数据访问
├── middleware/ # 中间件
├── utils/ # 工具函数
└── types/ # 类型定义
## 禁止
- 不要在控制器中直接写业务逻辑
- 不要在代码中硬编码配置
- 不要跳过输入验证
6.3 全栈项目
# 全栈项目配置
## 架构
- 前端:Next.js 14 App Router
- 后端:Next.js API Routes
- 数据库:PostgreSQL + Prisma
- 部署:Vercel
## 目录结构
app/
├── (auth)/ # 认证相关页面
├── (dashboard)/ # 仪表盘页面
├── api/ # API 路由
└── layout.tsx # 根布局
components/
├── ui/ # 基础 UI 组件
└── features/ # 业务组件
lib/
├── api/ # API 客户端
├── db/ # 数据库
└── utils/ # 工具函数
## 规范
- Server Component 优先
- 客户端交互用 Client Component
- 数据获取用 Server Actions
七、常见问题与解决方案
Q1:Claude 还是不按我的规范来,怎么办?
可能原因:
- CLAUDE.md 位置不对
- 规则写得太笼统
- 规则之间有冲突
解决方案:
# ❌ 太笼统
- 代码要写得好
# ✅ 具体明确
- 函数名要有动词前缀:getXxx, setXxx, handleXxx
- 函数长度不超过 50 行
- 嵌套深度不超过 3 层
Q2:规则文件太多,怎么知道加载了哪些?
使用 /memory 命令:
> /memory
Claude 会显示当前加载的所有内存文件。
Q3:团队成员对代码风格有分歧怎么办?
把争议放进 .claude/rules/ 进行讨论:
---
paths: **/*.{ts,tsx}
---
# 代码风格(团队共识)
以下规范经过团队讨论确定,请遵守:
- 分号:不加
- 引号:单引号
- 缩进:2 空格
讨论记录:#123
Q4:如何让规则只对特定目录生效?
使用 paths 前置事项:
---
paths: src/legacy/**
---
# 遗留代码处理规则
处理 src/legacy 目录时:
- 优先重构而不是修补
- 修改前先写测试
- 每次只改一个小模块
八、速查表:CLAUDE.md 配置要点
| 配置项 | 位置 | 用途 |
|---|---|---|
| 项目主配置 | ./CLAUDE.md |
项目整体说明 |
| 模块化规则 | ./.claude/rules/*.md |
分类规则文件 |
| 个人偏好 | ~/.claude/CLAUDE.md |
跨项目个人设置 |
| 本地偏好 | ./CLAUDE.local.md |
当前项目个人设置 |
写作原则:
- 具体明确:
2 空格缩进>正确格式化代码 - 结构清晰:用标题分组,用项目符号列出
- 定期更新:项目演进时同步更新规则
- 避免冗余:用
@import引用外部文件
九、效果验证
学完本篇,你应该能够完成以下任务:
验证清单
- 在项目根目录创建
CLAUDE.md文件 - 编写项目技术栈说明
- 编写代码规范(命名、格式、禁止事项)
- 配置常用命令
- 创建
.claude/rules/目录并添加分类规则 - 使用
/memory命令验证配置加载
动手练习(5分钟)
任务:为你的项目创建 CLAUDE.md
- 打开你的项目目录
- 创建 CLAUDE.md,填写以下内容:
# [项目名称]
## 一句话描述
[这个项目是做什么的]
## 技术栈
- [列出主要技术和版本]
## 代码规范
- 命名:[你的命名规范]
- 格式:[缩进、分号等]
- 测试:[测试要求]
## 常用命令
- `npm run dev` - 启动开发
- `npm test` - 运行测试
## 禁止
- [列出不能做的事]
- 验证效果:
claude
> 这个项目用的是什么技术栈?
> 我们的代码规范是什么?
如果 Claude 能准确回答这些问题,说明 CLAUDE.md 配置生效了。
进阶验证
创建一个 .claude/rules/api.md 规则文件:
---
paths: src/api/**
---
# API 开发规范
所有 API 相关代码必须:
1. 包含错误处理
2. 添加请求验证
3. 编写单元测试
然后让 Claude 帮你写一个 API 函数,看它是否遵守了这些规范。
十、总结与下期预告
本文要点
- 五层记忆体系:从企业到个人,层层递进
- CLAUDE.md 是项目说明书:让 Claude 一次性了解项目
- 模块化规则:用
.claude/rules/组织复杂项目 - 路径特定规则:用
paths限定规则生效范围 - 个人偏好:用
~/.claude/跨项目共享
下期预告
基础篇到这里就结束了。接下来我们进入进阶篇:
系列二第一篇:Skills 入门——封装你的第一个 AI 能力
- 什么是 Skill:把常用操作封装成可复用的能力
- SKILL.md 结构:从零创建一个 Skill
- 实战案例:创建一个代码审查 Skill
- 调试技巧:Skill 不工作怎么办?
敬请期待!
附录:完整配置模板
企业策略模板
# 企业开发规范
## 安全要求
- 禁止在代码中硬编码密钥
- 所有用户输入必须验证
- 使用参数化查询防止 SQL 注入
## 合规要求
- 代码变更必须经过 Code Review
- 敏感数据操作必须有审计日志
- 遵循 OWASP Top 10 安全指南
## 技术栈要求
- 后端:Node.js 18+
- 前端:React 18+
- 数据库:PostgreSQL
项目配置模板
# [项目名称] 配置
## 技术栈
- [框架] + [语言]
- [数据库]
- [其他工具]
## 目录结构
[项目目录结构]
## 代码规范
- [命名规范]
- [格式规范]
- [注释规范]
## 常用命令
- `[命令]` - [用途]
## 禁止事项
- [禁止1]
- [禁止2]
## 参考
- @README.md
- @package.json
本篇属于 Claude Code 提效系列第 3 篇
下期预告:Skills 入门——封装你的第一个 AI 能力
创建时间:2026-02-14
参考文档:Claude Code 中文文档 - 内存管理
评论区