第一节:项目初始化实战
从零搭建 Claude Code 项目

作者:小学子 📚 | 日期:2026年4月2日 | 第十阶段 · 模块十


# 第十阶段 · 模块十 · 第一节:项目初始化实战

核心问题

如何使用 Claude Code 初始化新项目?/init 命令的完整流程是什么?如何创建高效的 CLAUDE.md?


◇ 本节位置


        Claude Code 全局架构
        
        ┌─────────────────────────────────────────────────────────────────────┐
        │  实战案例                                                            │
        │                                                                      │
        │  项目初始化实战 ← 本节                                             │
        │  ├── /init 命令流程                                                │
        │  ├── CLAUDE.md 创建                                                │
        │  └── 技能和钩子配置                                                 │
        └─────────────────────────────────────────────────────────────────────┘
        


一、项目初始化概述

1.1 为什么需要初始化?


        ┌─────────────────────────────────────────────────────────────────────┐
        │  没有 CLAUDE.md:                                                    │
        │  - Claude 不了解项目结构                                            │
        │  - 不清楚构建/测试命令                                              │
        │  - 不知道编码规范                                                   │
        └─────────────────────────────────────────────────────────────────────┘
                                      │
                                      ▼
        ┌─────────────────────────────────────────────────────────────────────┐
        │  有 CLAUDE.md:                                                      │
        │  - 快速理解项目                                                      │
        │  - 正确的开发命令                                                    │
        │  - 遵循团队规范                                                      │
        └─────────────────────────────────────────────────────────────────────┘
        

1.2 Claude Code 初始化流程

源码位置:`src/commands/init.ts`


        // 初始化的三个阶段
        
        // Phase 1: 询问用户需求
        // - 项目 CLAUDE.md 还是个人 CLAUDE.local.md?
        // - 需要哪些技能和钩子?
        
        // Phase 2: 探索代码库
        // - 读取 package.json、README.md
        // - 检测构建命令、框架、结构
        
        // Phase 3: 补全信息
        // - 询问代码无法回答的问题
        // - 生成 CLAUDE.md 提案
        

1.3 五问分析

问 1:CLAUDE.md 和 CLAUDE.local.md 的区别?


        // CLAUDE.md
        // - 项目级共享
        // - 提交到版本控制
        // - 团队成员共享
        
        // CLAUDE.local.md
        // - 个人偏好
        // - 不提交到版本控制
        // - 仅自己可见
        


二、/init 命令详解

2.1 命令执行


        # 在项目根目录运行
        claude /init
        
        # 或使用 --init 标志
        claude --init
        

2.2 初始化选项

源码位置:`src/commands/init.ts`


        ┌─────────────────────────────────────────────────────────────────────┐
        │  /init 选项                                                         │
        │                                                                      │
        │  CLAUDE.md 文件:                                                    │
        │  ├─ Project CLAUDE.md ──> 团队共享                                 │
        │  ├─ Personal CLAUDE.local.md ──> 个人偏好                           │
        │  └─ Both ──> 两者都要                                               │
        │                                                                      │
        │  额外配置:                                                          │
        │  ├─ Skills + Hooks ──> 完整配置                                    │
        │  ├─ Skills only ──> 只创建技能                                     │
        │  ├─ Hooks only ──> 只创建钩子                                     │
        │  └─ Neither ──> 只创建 CLAUDE.md                                   │
        └─────────────────────────────────────────────────────────────────────┘
        

2.3 五问分析

问 1:应该选择哪些选项?


        // 建议:
        
        // 1. 新项目
        // - 选择 "Both" 和 "Skills + Hooks"
        // - 全面配置
        
        // 2. 现有项目
        // - 选择 "Project CLAUDE.md"
        // - 团队共享规范
        
        // 3. 个人使用
        // - 选择 "Personal CLAUDE.local.md"
        // - 只配置个人偏好
        


三、Phase 1:询问需求

3.1 Claude 询问的问题

源码位置:`src/commands/init.ts`


        // 问题 1:设置哪些 CLAUDE.md 文件?
        "Which CLAUDE.md files should /init set up?"
        - "Project CLAUDE.md" — 团队共享指令
        - "Personal CLAUDE.local.md" — 你的私人偏好
        - "Both project + personal"
        
        // 问题 2:需要技能和钩子吗?
        "Also set up skills and hooks?"
        - "Skills + hooks" — 完整配置
        - "Skills only" — 只创建技能
        - "Hooks only" — 只创建钩子
        - "Neither, just CLAUDE.md"
        

3.2 问题设计原则


        // Claude 只问代码无法回答的问题
        
        // 例如:
        // - 你的角色是什么?(后端/前端/数据科学家)
        // - 你对这个代码库熟悉吗?
        // - 有没有个人沙箱 URL 或测试账号?
        
        // Claude 不会问:
        // - package.json 中已有的信息
        // - README 中已有的信息
        

3.3 五问分析

问 1:为什么 Claude 要询问而不是直接创建?


        // 因为有些信息代码无法获取:
        
        // 1. 个人偏好
        // - 工作风格
        // - 通信习惯
        
        // 2. 团队流程
        // - 分支命名规范
        // - PR 合并规范
        
        // 3. 特殊要求
        // - 沙箱 URL
        // - 测试账号
        


四、Phase 2:探索代码库

4.1 Claude 读取的文件

源码位置:`src/commands/init.ts`


        // Claude 会读取这些文件:
        
        // 清单文件
        package.json, Cargo.toml, pyproject.toml, go.mod, pom.xml
        
        // 文档
        README.md, CLAUDE.md
        
        // 构建配置
        Makefile, build.gradle, CMakeLists.txt
        
        // CI 配置
        .github/workflows/, .gitlab-ci.yml
        
        // 编辑器规则
        .claude/rules/, .cursor/rules/, .cursorrules
        .github/copilot-instructions.md
        .windsurfrules, .clinerules
        
        // MCP 配置
        .mcp.json
        

4.2 Claude 检测的内容


        // Claude 从代码中检测:
        
        // 1. 构建/测试/林挺命令
        // - npm run build, npm test
        // - cargo build, cargo test
        
        // 2. 语言和框架
        // - TypeScript, React
        // - Python, Django
        
        // 3. 项目结构
        // - Monorepo (workspaces)
        // - Multi-module
        
        // 4. 代码风格
        // - prettier, eslint
        // - rustfmt, gofmt
        
        // 5. 现有的 skills 和 hooks
        // - .claude/skills/
        // - .claude/commands/
        

4.3 五问分析

问 1:Claude 能自动检测所有内容吗?


        // 不能
        
        // Claude 能检测:
        // - 已有文件中的信息
        // - 显式的配置
        
        // Claude 不能检测:
        // - 隐式的团队规范
        // - 文档中没有的 gotchas
        // - 个人偏好
        


五、Phase 3:补全信息

5.1 Claude 生成的提案

源码位置:`src/commands/init.ts`


        // Claude 生成配置提案,包括:
        
        // 1. Hook(严格)
        // - 格式化钩子:PostToolUse 后自动格式化
        // - 示例:ruff format <file>
        
        // 2. Skill(按需)
        // - /verify 技能:运行完整验证
        // - 示例:make lint && make typecheck && make test
        
        // 3. CLAUDE.md 笔记(宽松)
        // - 行为准则:plan before coding
        // - 示例:"每次编码前先提出计划"
        

5.2 提案的过滤规则


        // Claude 根据 Phase 1 选择过滤提案:
        
        // 如果选择 "Skills only":
        // - 所有 Hook 降级为 Skill 或 Note
        
        // 如果选择 "Hooks only":
        // - 所有 Skill 降级为 Hook 或 Note
        
        // 如果选择 "Neither":
        // - 一切都成为 Note
        

5.3 五问分析

问 1:Hook 和 Skill 有什么区别?


        // Hook = 工具事件触发,Claude 无法跳过
        // - 示例:PostToolUse 后自动运行 prettier
        // - 适用:格式化、linting、快速测试
        
        // Skill = 按需调用,Claude 可以选择
        // - 示例:/verify 运行完整验证
        // - 适用:深度验证、部署、报告
        


六、Phase 4-7:创建文件

6.1 创建 CLAUDE.md


        # CLAUDE.md
        
        This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
        
        ## 项目结构
        
        - `/src` — 源代码
        - `/tests` — 测试文件
        - `/docs` — 文档
        
        ## 构建命令
        
        - `npm run build` — 构建项目
        - `npm run test` — 运行测试
        - `npm run lint` — 运行 linter
        
        ## 架构
        
        本项目使用 React + TypeScript,采用模块化架构...
        

6.2 CLAUDE.md 编写原则

源码位置:`src/commands/init.ts`


        // 每个文件都要通过这个测试:
        // "Would removing this cause Claude to make mistakes?"
        
        // 如果答案是 "否",就删除它
        
        // 避免:
        // - 显而易见的说明
        // - 可以从代码中轻松发现的信息
        // - 过于详细的文件列表
        

6.3 五问分析

问 1:CLAUDE.md 应该多详细?


        // 原则:最小化
        
        // 应该包含:
        // - Claude 会弄错的
        // - 非显而易见的
        // - 团队特定的规范
        
        // 不应该包含:
        // - package.json 中已有的命令
        // - 可以从代码中发现的信息
        // - 显而易见的最佳实践
        


七、实战示例

7.1 初始化 Node.js 项目


        # 进入项目目录
        cd my-node-project
        
        # 运行初始化
        claude /init
        

7.2 Claude 的输出


        🤖 Claude: 我来帮你设置 CLAUDE.md
        
        首先,我需要了解你的需求:
        
        1. 哪些 CLAUDE.md 文件?
           - Project CLAUDE.md(团队共享)
           - Personal CLAUDE.local.md(个人偏好)
           - Both
        
        2. 需要技能和钩子吗?
           - Skills + hooks(完整配置)
           - ...
        
        我正在分析你的代码库...
        

7.3 最终生成的文件


        .claude/
        ├── CLAUDE.md          # 项目级配置
        ├── skills/            # 技能目录
        │   └── verify.ts      # 验证技能
        └── hooks/
            └── format-hook.ts # 格式化钩子
        

7.4 五问分析

问 1:如何验证初始化是否成功?


        // 方法:
        
        // 1. 检查文件存在
        ls -la CLAUDE.md
        
        // 2. 测试 Claude 理解
        claude "这个项目的构建命令是什么?"
        
        // 3. 测试 Hook
        # 修改文件,看是否自动格式化
        


八、常见问题

8.1 已有 CLAUDE.md 怎么办?


        // Claude 会:
        // 1. 读取现有的 CLAUDE.md
        // 2. 提出改进建议
        // 3. 不覆盖现有内容,除非你同意
        

8.2 非标准项目结构


        // Claude 会询问:
        
        // 1. Monorepo?
        // 2. Multi-module?
        // 3. 特殊目录结构?
        

8.3 五问分析

问 1:初始化可以多次运行吗?


        // 可以
        
        // 每次运行 /init:
        // - 可以添加新的技能和钩子
        // - 可以更新 CLAUDE.md
        // - 不会删除已有内容
        


九、思考题

思考题 1:如何决定使用 Project 还是 Personal CLAUDE.md?

答案


        // 使用 Project CLAUDE.md:
        // - 团队共享的规范
        // - 架构说明
        // - 构建命令
        
        // 使用 Personal CLAUDE.local.md:
        // - 个人偏好
        // - 沙箱 URL
        // - 通信习惯
        
        // 建议:大多数项目使用 Project
        // 个人偏好只在多个项目间共享时使用 Personal
        


思考题 2:如何让 CLAUDE.md 保持精简?

答案


        // 精简原则:
        
        // 1. 每行都要回答这个问题:
        // "删除这行会让 Claude 犯错吗?"
        
        // 2. 不要包含:
        // - 显而易见的说明
        // - 可以从代码中发现的信息
        
        // 3. 只包含:
        // - 非显而易见的
        // - Claude 会弄错的
        


思考题 3:如何维护 CLAUDE.md?

答案


        // 维护策略:
        
        // 1. 项目结构大改时更新
        // 2. 添加新的 gotchas
        // 3. 移除过时的信息
        
        // 定期检查:
        // - CLAUDE.md 是否还有效
        // - 是否有未记录的规范
        // - 是否有可以删除的冗余内容
        


十、延伸阅读

资源说明
Claude Code 文档https://docs.anthropic.com/claude-code
CLAUDE.md 指南https://docs.anthropic.com/claude-code/initialize


十一、下节预告

下一节我们将深入 代码重构实战

- 重构前的分析

- 安全的重构步骤

- 重构验证


*- 第一轮:□ 事实准确性*

*- 第二轮:□ 深度与洞见*

*- 第三轮:□ 可读性与价值*