logo

CLAUDE.md 配置实践

CLAUDE.md = 项目级 System Prompt

Claude Code 在每次启动时自动读取项目根目录的 CLAUDE.md 文件,把它当作 System Prompt 的一部分。这意味着你可以用一个 Markdown 文件,持久化控制 AI 在这个项目里的行为。

和在聊天里反复说"请用 TypeScript""不要用 any""用 pnpm 不要用 npm"相比,写一次 CLAUDE.md 就永久生效。

# CLAUDE.md 的加载层级(优先级从高到低)
~/.claude/CLAUDE.md          # 全局:你的个人偏好
./CLAUDE.md                  # 项目根:团队共享规则
./src/CLAUDE.md              # 子目录:特定模块的规则

---

一个生产级 CLAUDE.md 示例

# CLAUDE.md

项目概览

JR Academy 官网后端,Node.js 20 + NestJS 10 + PostgreSQL 16 + Prisma ORM。 Monorepo 用 pnpm workspace 管理,apps/api + apps/admin + packages/shared。

命令

  • pnpm dev — 启动开发服务器
  • pnpm test — 跑单元测试(vitest)
  • pnpm lint — ESLint + Prettier 检查
  • pnpm db:migrate — 跑数据库迁移

代码规范

  • TypeScript strict mode,禁止 any
  • 函数命名用 camelCase,文件名用 kebab-case
  • API 返回值统一用 { data, error, message } 结构
  • 错误处理用 NestJS ExceptionFilter,不要 try-catch 每个函数
  • 数据库查询用 Prisma,不写原生 SQL

架构规则

  • Controller 只做参数校验和路由,业务逻辑放 Service
  • Service 之间不互相依赖,通过 EventEmitter 通信
  • 新增 API 必须写 e2e 测试(tests/e2e/)
  • 不要引入新的 npm 包,除非先讨论

Git 规范

  • commit message 格式:type(scope): description
  • type: feat / fix / refactor / test / docs / chore
  • 一个 commit 只做一件事

---

写 CLAUDE.md 的核心原则

原则 1:写约束,不写教程

# ❌ 像教程一样写
NestJS 是一个渐进式 Node.js 框架,它使用 TypeScript 构建高效、
可扩展的服务端应用程序...

✅ 写 AI 需要遵守的规则

NestJS 10 项目。Controller 不放业务逻辑。Service 用构造函数注入。 新模块用 nest g module 生成。

AI 已经知道 NestJS 是什么。它不知道的是你这个项目用 NestJS 的具体方式。

原则 2:给命令,不给选择

# ❌ 给 AI 选择空间
可以用 Jest 或 Vitest 来写测试,推荐 Vitest。

✅ 直接指定

测试用 Vitest。运行命令:pnpm test。 测试文件放在 __tests__/ 目录,命名:*.test.ts。

原则 3:用例子代替描述

# ❌ 纯文字描述
API 错误返回要有错误码和消息。

✅ 给一个实际的例子

API 错误返回格式: { "error": "COURSE_NOT_FOUND", "message": "Course with id 'abc' not found", "statusCode": 404 }

---

常见场景的 CLAUDE.md 片段

前端 React 项目

## 技术栈
React 18 + TypeScript + Tailwind CSS + Zustand + React Query

组件规范

  • 用函数组件 + hooks,不用 class component
  • 组件文件用 PascalCase:UserProfile.tsx
  • 每个组件一个文件,不要在一个文件里导出多个组件
  • Props 用 interface 定义,不用 type(团队约定)
  • 样式只用 Tailwind,不写 CSS 文件

状态管理

  • 服务端状态用 React Query(useQuery / useMutation)
  • 客户端状态用 Zustand(stores/ 目录)
  • 不要用 useState 管理从 API 获取的数据

Python 数据项目

## 环境
Python 3.12 + uv 包管理。虚拟环境在 .venv/。

命令

  • uv run pytest — 跑测试
  • uv run ruff check . — lint 检查
  • uv run python -m mypy src/ — 类型检查

规范

  • 类型标注:所有函数必须有参数和返回值类型标注
  • 数据处理用 polars,不用 pandas
  • 配置用 pydantic Settings,不用 dotenv

---

CLAUDE.md 和 Prompt Engineering 的关系

CLAUDE.md 本质上就是 Prompt Engineering 的落地形式:

| Prompt 概念 | CLAUDE.md 对应 | |-------------|----------------| | System Prompt | 整个 CLAUDE.md 文件 | | 角色设定 | "项目概览"部分 | | 约束条件 | "代码规范""架构规则" | | Few-shot 示例 | 代码格式和错误返回的例子 | | 否定约束 | "不要用 any""不要引入新包" |

区别在于:聊天里的 Prompt 用完就丢,CLAUDE.md 是持久化的、团队共享的、版本控制的。

写好 CLAUDE.md 的人,本质上是在做 项目级 Prompt Engineering —— 用一个文件控制 AI 在整个项目里的行为模式。这比每次聊天都重复说一遍规则高效得多。

JR Academy · Blog职业洞察

Prompt Engineering 实战指南 — CLAUDE.md 实战:用文件驱动 AI 编程行为

CLAUDE.md 是 Claude Code 的项目级 Prompt 配置文件,相当于给 AI 编程助手写一份持久化的 System Prompt。本章讲如何写好 CLAUDE.md 来控制代码风格、架构决策和工作流

发布日期
阅读时长2 分钟
作者

CLAUDE.md 配置实践

CLAUDE.md = 项目级 System Prompt

Claude Code 在每次启动时自动读取项目根目录的 CLAUDE.md 文件,把它当作 System Prompt 的一部分。这意味着你可以用一个 Markdown 文件,持久化控制 AI 在这个项目里的行为。

和在聊天里反复说"请用 TypeScript""不要用 any""用 pnpm 不要用 npm"相比,写一次 CLAUDE.md 就永久生效。

# CLAUDE.md 的加载层级(优先级从高到低)
~/.claude/CLAUDE.md          # 全局:你的个人偏好
./CLAUDE.md                  # 项目根:团队共享规则
./src/CLAUDE.md              # 子目录:特定模块的规则

---

一个生产级 CLAUDE.md 示例

# CLAUDE.md

项目概览

JR Academy 官网后端,Node.js 20 + NestJS 10 + PostgreSQL 16 + Prisma ORM。 Monorepo 用 pnpm workspace 管理,apps/api + apps/admin + packages/shared。

命令

  • pnpm dev — 启动开发服务器
  • pnpm test — 跑单元测试(vitest)
  • pnpm lint — ESLint + Prettier 检查
  • pnpm db:migrate — 跑数据库迁移

代码规范

  • TypeScript strict mode,禁止 any
  • 函数命名用 camelCase,文件名用 kebab-case
  • API 返回值统一用 { data, error, message } 结构
  • 错误处理用 NestJS ExceptionFilter,不要 try-catch 每个函数
  • 数据库查询用 Prisma,不写原生 SQL

架构规则

  • Controller 只做参数校验和路由,业务逻辑放 Service
  • Service 之间不互相依赖,通过 EventEmitter 通信
  • 新增 API 必须写 e2e 测试(tests/e2e/)
  • 不要引入新的 npm 包,除非先讨论

Git 规范

  • commit message 格式:type(scope): description
  • type: feat / fix / refactor / test / docs / chore
  • 一个 commit 只做一件事

---

写 CLAUDE.md 的核心原则

原则 1:写约束,不写教程

# ❌ 像教程一样写
NestJS 是一个渐进式 Node.js 框架,它使用 TypeScript 构建高效、
可扩展的服务端应用程序...

✅ 写 AI 需要遵守的规则

NestJS 10 项目。Controller 不放业务逻辑。Service 用构造函数注入。 新模块用 nest g module 生成。

AI 已经知道 NestJS 是什么。它不知道的是你这个项目用 NestJS 的具体方式。

原则 2:给命令,不给选择

# ❌ 给 AI 选择空间
可以用 Jest 或 Vitest 来写测试,推荐 Vitest。

✅ 直接指定

测试用 Vitest。运行命令:pnpm test。 测试文件放在 __tests__/ 目录,命名:*.test.ts。

原则 3:用例子代替描述

# ❌ 纯文字描述
API 错误返回要有错误码和消息。

✅ 给一个实际的例子

API 错误返回格式: { "error": "COURSE_NOT_FOUND", "message": "Course with id 'abc' not found", "statusCode": 404 }

---

常见场景的 CLAUDE.md 片段

前端 React 项目

## 技术栈
React 18 + TypeScript + Tailwind CSS + Zustand + React Query

组件规范

  • 用函数组件 + hooks,不用 class component
  • 组件文件用 PascalCase:UserProfile.tsx
  • 每个组件一个文件,不要在一个文件里导出多个组件
  • Props 用 interface 定义,不用 type(团队约定)
  • 样式只用 Tailwind,不写 CSS 文件

状态管理

  • 服务端状态用 React Query(useQuery / useMutation)
  • 客户端状态用 Zustand(stores/ 目录)
  • 不要用 useState 管理从 API 获取的数据

Python 数据项目

## 环境
Python 3.12 + uv 包管理。虚拟环境在 .venv/。

命令

  • uv run pytest — 跑测试
  • uv run ruff check . — lint 检查
  • uv run python -m mypy src/ — 类型检查

规范

  • 类型标注:所有函数必须有参数和返回值类型标注
  • 数据处理用 polars,不用 pandas
  • 配置用 pydantic Settings,不用 dotenv

---

CLAUDE.md 和 Prompt Engineering 的关系

CLAUDE.md 本质上就是 Prompt Engineering 的落地形式:

| Prompt 概念 | CLAUDE.md 对应 | |-------------|----------------| | System Prompt | 整个 CLAUDE.md 文件 | | 角色设定 | "项目概览"部分 | | 约束条件 | "代码规范""架构规则" | | Few-shot 示例 | 代码格式和错误返回的例子 | | 否定约束 | "不要用 any""不要引入新包" |

区别在于:聊天里的 Prompt 用完就丢,CLAUDE.md 是持久化的、团队共享的、版本控制的。

写好 CLAUDE.md 的人,本质上是在做 项目级 Prompt Engineering —— 用一个文件控制 AI 在整个项目里的行为模式。这比每次聊天都重复说一遍规则高效得多。

作者
一键分享或复制链接

相关文章推荐

查看全部文章 →