Claude Code: 项目初始化与项目结构
最后更新:2026-08-31
Claude Code 在进入项目时会自动分析项目结构,但你也可以通过 CLAUDE.md 主动引导它理解项目的约定和架构。
💡 提示:项目初始化不仅是 Claude Code 读取文件,更重要的是它如何理解项目的"隐式约定"——编码风格、目录规范、测试策略等。CLAUDE.md 就是这些约定的显式载体。
📋 前置知识:第五章 VS Code 与 JetBrains 集成
1. 你将学到
- Claude Code 如何理解项目结构
- 不同框架项目的初始化特点
- CLAUDE.md 的作用与自动生成
- 上下文窗口与项目大小
- 大型项目的优化策略
2. Claude Code 如何理解项目
(1) 自动分析流程
graph TB
A[进入项目目录] --> B[读取 CLAUDE.md]
B --> C[扫描目录结构]
C --> D[识别框架/语言]
D --> E[读取关键配置文件]
E --> F[构建上下文]
| 步骤 | 读取文件 | 目的 |
|---|---|---|
| CLAUDE.md | 项目根目录 CLAUDE.md | 获取项目约定和指令 |
| 配置文件 | package.json, pom.xml, go.mod 等 | 识别技术栈和依赖 |
| 目录结构 | src/, lib/, tests/ 等 | 理解代码组织方式 |
| README | README.md | 获取项目概述 |
(2) 识别的技术栈
| 配置文件 | 识别结果 | 自动行为 |
|---|---|---|
package.json |
Node.js 项目 | 使用 npm/yarn/pnpm |
pom.xml |
Java Maven | 使用 mvn 命令 |
build.gradle |
Java Gradle | 使用 gradle 命令 |
go.mod |
Go 项目 | 使用 go 命令 |
requirements.txt |
Python 项目 | 使用 pip/pytest |
Cargo.toml |
Rust 项目 | 使用 cargo 命令 |
▶ 示例 1: 项目分析输出
TEXT
📖 仅展示
$ claude
╭─ Claude Code ──────────────────────────────╮
│ Project Analysis: │
│ Type: Node.js / TypeScript │
│ Framework: Express.js │
│ Test: Jest │
│ Package: npm │
│ Structure: │
│ src/ │
│ routes/ (12 route files) │
│ models/ (8 model files) │
│ middleware/ (4 files) │
│ utils/ (6 utility files) │
│ tests/ │
│ config/ │
│ Key deps: express, mongoose, jest │
╰─────────────────────────────────────────────╯
3. CLAUDE.md 项目配置
(1) 自动生成 CLAUDE.md
BASH
# 让 Claude Code 分析项目并生成 CLAUDE.md
claude /init
# 生成的 CLAUDE.md 包含:
# - 项目描述
# - 技术栈
# - 构建和测试命令
# - 代码风格约定
# - 目录结构说明
(2) 手动编写 CLAUDE.md
MARKDOWN
# CLAUDE.md
## 项目概述
电商后台管理系统,使用 Express + TypeScript + Prisma
## 技术栈
- Runtime: Node.js 20
- Framework: Express 4.x
- ORM: Prisma 5.x
- Test: Vitest
- Lint: ESLint + Prettier
## 常用命令
- 开发: `npm run dev`
- 构建: `npm run build`
- 测试: `npm test`
- Lint: `npm run lint`
## 代码约定
- 使用 ES Module 语法
- 所有 API 响应使用统一格式 { code, data, message }
- 错误处理使用自定义 AppError 类
- 路由文件放在 src/routes/ 下
- 每个 route 文件对应一个 test 文件
## 不要做的事
- 不要使用 var,只用 const/let
- 不要直接使用 mongoose,用 Prisma
- 不要修改 prisma/schema.prisma 除非明确要求
▶ 示例 2: 针对不同项目的 CLAUDE.md
MARKDOWN
<!-- Go 项目的 CLAUDE.md -->
# CLAUDE.md
## 项目
RESTful API 服务,Go 1.22 + Gin + GORM
## 命令
- 运行: `go run ./cmd/server`
- 测试: `go test ./...`
- 构建: `go build -o bin/server ./cmd/server`
## 约定
- 使用标准项目布局(cmd/, internal/, pkg/)
- 错误返回使用 pkg/errors 包
- 所有 handler 接收 gin.Context
- 数据库操作只在 repository 层
4. 项目结构最佳实践
(1) 对 Claude Code 友好的项目结构
| 特征 | 友好 | 不友好 |
|---|---|---|
| 目录层级 | 3-4 层,清晰命名 | 10+ 层嵌套 |
| 文件命名 | 一致的命名规范 | 随意命名 |
| 配置文件 | 标准位置 | 散落各处 |
| 测试位置 | 集中或就近 | 没有测试 |
| 文档 | README + CLAUDE.md | 无文档 |
(2) 大型项目优化
▶ 示例 3: 大型项目的上下文管理
MARKDOWN
<!-- 大型项目的 CLAUDE.md(精简版)-->
# CLAUDE.md
## 项目结构(只列核心)
- src/core/ 核心业务逻辑
- src/api/ API 路由和控制器
- src/models/ 数据模型
- src/utils/ 工具函数
- tests/ 测试
## 工作范围
- 当前主要开发 src/api/ 目录
- 测试使用 Jest
- 数据库使用 Prisma
## 重要约束
- 所有数据库操作必须通过 Prisma Client
- API 响应格式遵循 RFC 7807 Problem Details
- 认证使用 JWT,密钥从环境变量读取
5. 多语言/多模块项目
(1) Monorepo 支持
TEXT
📖 仅展示
my-monorepo/
├── CLAUDE.md # 全局配置
├── packages/
│ ├── frontend/
│ │ └── CLAUDE.md # 前端子项目配置
│ ├── backend/
│ │ └── CLAUDE.md # 后端子项目配置
│ └── shared/
│ └── CLAUDE.md # 共享库配置
├── package.json
└── turbo.json
(2) 子目录独立配置
BASH
# 在不同子目录启动 Claude Code 会读取对应的 CLAUDE.md
cd packages/frontend && claude # 读取 frontend/CLAUDE.md
cd packages/backend && claude # 读取 backend/CLAUDE.md
6. 综合示例:项目初始化全流程
BASH
# Alice 为新项目做完整初始化
# 1. 创建项目
mkdir ecommerce-api && cd ecommerce-api
npm init -y
# 2. 初始化 git
git init
# 3. 启动 Claude Code 生成项目骨架
claude "初始化一个 Express + TypeScript 项目:
1. 配置 tsconfig.json
2. 设置 ESLint + Prettier
3. 创建 src/ 目录结构(routes, controllers, models, middleware, utils)
4. 配置 Jest 测试
5. 创建 .gitignore
6. 生成 CLAUDE.md"
# Claude Code 输出:
# → Creating tsconfig.json
# → Creating .eslintrc.js and .prettierrc
# → Creating directory structure...
# → Configuring Jest
# → Creating .gitignore
# → Generating CLAUDE.md based on project setup
# → Running: npm run build ✓
# 4. 检查生成的 CLAUDE.md
cat CLAUDE.md
# 5. 根据需要调整 CLAUDE.md
# 添加团队特定约定...
# 6. 提交初始状态
git add -A && git commit -m "feat: project initialization"
❓ 常见问题
Q CLAUDE.md 和 README.md 有什么区别?
A README 是给人看的项目说明;CLAUDE.md 是给 Claude Code 看的工作指令。CLAUDE.md 更关注编码约定、常用命令和约束。
Q 项目太大,Claude Code 读不完怎么办?
A Claude Code 会智能选择关键文件读取,不会全量加载。你也可以在 CLAUDE.md 中明确工作范围,减少上下文消耗。
Q CLAUDE.md 必须放在根目录吗?
A 根目录的 CLAUDE.md 是全局配置。子目录也可以放 CLAUDE.md,Claude Code 会合并读取。
Q 需要把 CLAUDE.md 提交到 git 吗?
A 建议提交。团队共享项目约定比个人配置更有价值。敏感信息(API Key 等)不要写在 CLAUDE.md 中。
Q
/init 生成的 CLAUDE.md 不准确怎么办?A 手动修改。
/init 只是辅助生成,最终 CLAUDE.md 的准确性需要人工审查和调整。Q Monorepo 中每个包都需要 CLAUDE.md 吗?
A 不一定。如果包之间差异不大,一个根 CLAUDE.md 就够了。差异大时建议每个包单独配置。
📖 小节
- Claude Code 自动分析项目结构、识别技术栈
- CLAUDE.md 是项目约定的显式载体,
/init可自动生成 - 对 Claude Code 友好的项目:清晰目录、一致命名、标准配置
- 大型项目通过 CLAUDE.md 限定工作范围减少 Token 消耗
- Monorepo 支持多层 CLAUDE.md 配置
📝 作业
- 基础题(难度⭐):在一个现有项目中运行
claude /init,检查生成的 CLAUDE.md 是否准确。 - 进阶题(难度⭐⭐):手动编写一个完整的 CLAUDE.md,包含项目约定、常用命令和约束条件。
- 挑战题(难度⭐⭐⭐):为一个 Monorepo 项目设计多层 CLAUDE.md 配置方案,确保各子项目独立运作。