[{"data":1,"prerenderedAt":3826},["ShallowReactive",2],{"navigation":3,"\u002Fquickstart\u002Fcodebase-understanding":189,"\u002Fquickstart\u002Fcodebase-understanding-surround":3821},[4,35,57,75,101,123,149,171],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":34},"第 1 章：认识 Claude Code","i-lucide-rocket","\u002Fintro","1.intro",[10,14,18,22,26,30],{"title":11,"path":12,"stem":13},"什么是 Claude Code","\u002Fintro\u002Fwhat-is-claude-code","1.intro\u002F1.what-is-claude-code",{"title":15,"path":16,"stem":17},"Claude Code 与 Copilot、Cursor、Windsurf 的本质区别","\u002Fintro\u002Fvs-competitors","1.intro\u002F2.vs-competitors",{"title":19,"path":20,"stem":21},"AI 编程助手生态全景与选型指南","\u002Fintro\u002Fecosystem-guide","1.intro\u002F3.ecosystem-guide",{"title":23,"path":24,"stem":25},"LLM 的概率本质","\u002Fintro\u002Fllm-probability","1.intro\u002F4.llm-probability",{"title":27,"path":28,"stem":29},"从聊天机器人到 Agent","\u002Fintro\u002Ffrom-chatbot-to-agent","1.intro\u002F5.from-chatbot-to-agent",{"title":31,"path":32,"stem":33},"Claude Code 的 Agentic Loop 全拆解","\u002Fintro\u002Fagentic-loop","1.intro\u002F6.agentic-loop",false,{"title":36,"icon":37,"path":38,"stem":39,"children":40,"page":34},"第 2 章：安装与配置","i-lucide-settings","\u002Fsetup","2.setup",[41,45,49,53],{"title":42,"path":43,"stem":44},"系统要求与安装方式","\u002Fsetup\u002Fsystem-requirements","2.setup\u002F1.system-requirements",{"title":46,"path":47,"stem":48},"认证、登录与多账户管理","\u002Fsetup\u002Fauthentication","2.setup\u002F2.authentication",{"title":50,"path":51,"stem":52},"选择你的界面","\u002Fsetup\u002Fchoose-interface","2.setup\u002F3.choose-interface",{"title":54,"path":55,"stem":56},"Coding Plan","\u002Fsetup\u002Fcoding-plan","2.setup\u002F4.coding-plan",{"title":58,"icon":59,"path":60,"stem":61,"children":62,"page":34},"第 3 章：快速上手","i-lucide-hand","\u002Fquickstart","3.quickstart",[63,67,71],{"title":64,"path":65,"stem":66},"启动、交互模式与基本命令","\u002Fquickstart\u002Fstartup","3.quickstart\u002F1.startup",{"title":68,"path":69,"stem":70},"让 Claude 理解你的项目","\u002Fquickstart\u002Fcodebase-understanding","3.quickstart\u002F2.codebase-understanding",{"title":72,"path":73,"stem":74},"第一次代码变更","\u002Fquickstart\u002Ffirst-change","3.quickstart\u002F3.first-change",{"title":76,"icon":77,"path":78,"stem":79,"children":80,"page":34},"第 4 章：核心功能","i-lucide-laptop","\u002Fcore-features","4.core-features",[81,85,89,93,97],{"title":82,"path":83,"stem":84},"代码库全景扫描与模块关系分析","\u002Fcore-features\u002Fcodebase-scan","4.core-features\u002F1.codebase-scan",{"title":86,"path":87,"stem":88},"代码编辑与生成","\u002Fcore-features\u002Fedit-generate","4.core-features\u002F2.edit-generate",{"title":90,"path":91,"stem":92},"测试与调试","\u002Fcore-features\u002Ftest-debug","4.core-features\u002F3.test-debug",{"title":94,"path":95,"stem":96},"Git 工作流","\u002Fcore-features\u002Fgit-workflow","4.core-features\u002F4.git-workflow",{"title":98,"path":99,"stem":100},"工具链执行","\u002Fcore-features\u002Ftoolchain","4.core-features\u002F5.toolchain",{"title":102,"icon":103,"path":104,"stem":105,"children":106,"page":34},"第 5 章：进阶配置","i-lucide-wrench","\u002Fadvanced","5.advanced",[107,111,115,119],{"title":108,"path":109,"stem":110},"CLAUDE.md","\u002Fadvanced\u002Fclaude-md","5.advanced\u002F1.claude-md",{"title":112,"path":113,"stem":114},"Skills","\u002Fadvanced\u002Fskills","5.advanced\u002F2.skills",{"title":116,"path":117,"stem":118},"MCP","\u002Fadvanced\u002Fmcp","5.advanced\u002F3.mcp",{"title":120,"path":121,"stem":122},"Hooks 与 Plan 模式","\u002Fadvanced\u002Fhooks-plan","5.advanced\u002F4.hooks-plan",{"title":124,"icon":125,"path":126,"stem":127,"children":128,"page":34},"第 6 章：实战开发","i-lucide-hammer","\u002Fpractice","6.practice",[129,133,137,141,145],{"title":130,"path":131,"stem":132},"需求分析与架构设计","\u002Fpractice\u002Frequirements-architecture","6.practice\u002F1.requirements-architecture",{"title":134,"path":135,"stem":136},"项目脚手架搭建与技术选型","\u002Fpractice\u002Fscaffolding","6.practice\u002F2.scaffolding",{"title":138,"path":139,"stem":140},"核心功能实现","\u002Fpractice\u002Fcore-features","6.practice\u002F3.core-features",{"title":142,"path":143,"stem":144},"测试覆盖、代码审查与质量调优","\u002Fpractice\u002Ftesting-quality","6.practice\u002F4.testing-quality",{"title":146,"path":147,"stem":148},"部署上线与成果分享","\u002Fpractice\u002Fdeployment","6.practice\u002F5.deployment",{"title":150,"icon":151,"path":152,"stem":153,"children":154,"page":34},"第 7 章：心法层","i-lucide-brain","\u002Fmindset","7.mindset",[155,159,163,167],{"title":156,"path":157,"stem":158},"提示词设计原则","\u002Fmindset\u002Fprompt-design","7.mindset\u002F1.prompt-design",{"title":160,"path":161,"stem":162},"上下文管理策略","\u002Fmindset\u002Fcontext-management","7.mindset\u002F2.context-management",{"title":164,"path":165,"stem":166},"安全与权限控制","\u002Fmindset\u002Fsecurity","7.mindset\u002F3.security",{"title":168,"path":169,"stem":170},"Boris Cherny 的 9 条实战心法与团队推广经验","\u002Fmindset\u002Fboris-cherny-tips","7.mindset\u002F4.boris-cherny-tips",{"title":172,"icon":173,"path":174,"stem":175,"children":176,"page":34},"附录","i-lucide-paperclip","\u002Fappendix","8.appendix",[177,181,185],{"title":178,"path":179,"stem":180},"常用命令速查表","\u002Fappendix\u002Fa.command-cheatsheet","8.appendix\u002Fa.command-cheatsheet",{"title":182,"path":183,"stem":184},"AI 核心术语汇编","\u002Fappendix\u002Fb.ai-terminology","8.appendix\u002Fb.ai-terminology",{"title":186,"path":187,"stem":188},"资源链接与延伸阅读","\u002Fappendix\u002Fc.resources","8.appendix\u002Fc.resources",{"id":190,"title":68,"body":191,"description":3814,"extension":3815,"links":3816,"meta":3817,"navigation":1749,"path":69,"seo":3819,"stem":70,"__hash__":3820},"docs\u002F3.quickstart\u002F2.codebase-understanding.md",{"type":192,"value":193,"toc":3757},"minimark",[194,198,201,204,209,214,227,238,244,250,256,263,267,273,278,281,371,376,379,385,390,393,450,455,458,490,494,501,506,509,545,550,553,572,577,580,599,604,607,626,631,634,653,657,662,744,747,773,775,779,783,786,791,808,813,819,824,844,848,851,856,870,875,881,886,907,911,914,919,936,941,947,949,953,957,960,965,984,989,1014,1019,1051,1056,1081,1085,1088,1093,1119,1123,1129,1132,1143,1149,1153,1156,1161,1180,1185,1205,1209,1215,1219,1230,1235,1258,1265,1330,1335,1362,1364,1368,1372,1378,1459,1463,1468,1473,1484,1489,1500,1505,1520,1525,1536,1544,1550,1564,1569,1575,1582,1591,1607,1612,1626,1633,1694,1696,1700,1704,1707,1712,1724,2055,2058,2073,2079,2082,2096,2105,2110,2118,2124,2127,2131,2134,2139,2158,2163,2182,2187,2251,2256,2262,2266,2272,2277,2306,2311,2328,2333,2353,2360,2362,2366,2370,2384,2388,2394,2398,2412,2416,2436,2440,2457,2461,2494,2498,2522,2526,2556,2560,2577,2579,2583,2587,2593,2598,2601,2606,2609,2614,2617,2621,2626,2631,2634,2658,2663,2666,2714,2720,2724,2733,2738,2766,2771,2801,2806,2809,2813,2818,2823,2826,2861,2866,2869,2874,2877,2956,2960,2965,2972,2978,2983,2986,3003,3008,3011,3025,3030,3033,3055,3063,3075,3127,3130,3132,3136,3139,3145,3150,3187,3192,3212,3217,3231,3236,3272,3277,3300,3305,3322,3327,3353,3356,3358,3362,3458,3460,3464,3467,3591,3593,3597,3753],[195,196,197],"p",{},"Claude Code 最强大的能力之一，是它能够直接读取和操作你的代码库。但\"能读取\"和\"读得懂\"是两个完全不同的层次。一个刚启动的 Claude 会话对你的项目一无所知——它不知道你用的是什么框架，不知道你的目录结构遵循什么约定，不知道哪些文件是核心入口，哪些只是生成的产物。",[195,199,200],{},"本章将系统讲解 Claude Code 如何\"读取\"和理解代码库，以及你如何通过主动提供上下文、使用正确的提问策略，让 Claude 从\"盲人摸象\"快速进化为\"胸有成竹\"。无论你是面对一个陌生的开源项目、接手一个遗留系统，还是想在日常开发中最大化 Claude 的效率，这些策略都至关重要。",[202,203],"hr",{},[205,206,208],"h2",{"id":207},"一claude-code-如何读取代码库","一、Claude Code 如何\"读取\"代码库",[210,211,213],"h3",{"id":212},"_11-agentic-loop观察-推理-行动的循环","1.1 Agentic Loop：观察-推理-行动的循环",[195,215,216,217,221,222,226],{},"Claude Code 不是一个静态的代码分析工具，而是一个动态的 Agent。当你向它提出一个涉及代码库的问题时，它会进入一个被称为 ",[218,219,220],"strong",{},"Agentic Loop"," 的三阶段循环",[223,224,225],"span",{},"^1","：",[228,229,234],"pre",{"className":230,"code":232,"language":233},[231],"language-text","┌─────────────────────────────────────────────────────────────┐\n│                     Agentic Loop                            │\n├─────────────────────────────────────────────────────────────┤\n│                                                             │\n│   用户提问                                                  │\n│      │                                                      │\n│      ▼                                                      │\n│   ┌──────────────┐    ┌──────────────┐    ┌─────────────┐  │\n│   │  Gather      │───▶│  Take        │───▶│  Verify     │  │\n│   │  Context     │    │  Action      │    │  Results    │  │\n│   │  (收集上下文) │    │  (执行操作)   │    │  (验证结果)  │  │\n│   └──────────────┘    └──────────────┘    └─────────────┘  │\n│          │                   │                   │          │\n│          └───────────────────┴───────────────────┘          │\n│                        (循环直到完成)                        │\n│                                                             │\n└─────────────────────────────────────────────────────────────┘\n","text",[235,236,232],"code",{"__ignoreMap":237},"",[195,239,240,243],{},[218,241,242],{},"收集上下文（Gather Context）","：Claude 首先判断需要了解哪些信息才能回答你的问题。它可能会搜索文件、读取目录结构、查看配置文件，甚至运行命令来获取项目状态。",[195,245,246,249],{},[218,247,248],{},"执行操作（Take Action）","：基于收集到的信息，Claude 决定下一步行动——可能是读取更多文件、编辑代码、运行测试，或者向你请求澄清。",[195,251,252,255],{},[218,253,254],{},"验证结果（Verify Results）","：执行后，Claude 检查结果是否符合预期。如果测试失败或输出不符合预期，它会回到收集上下文阶段，调整策略后重试。",[195,257,258,259,262],{},"这个循环的关键在于：",[218,260,261],{},"Claude 不是一次性读取整个代码库，而是按需、渐进式地探索","。这种设计既是优势（节省 token），也是挑战（需要正确引导）。",[210,264,266],{"id":265},"_12-自动发现策略claude-如何决定读什么","1.2 自动发现策略：Claude 如何决定读什么",[195,268,269,270,226],{},"当你问\"这个项目做什么\"时，Claude 会启动一套启发式的自动发现策略",[223,271,272],{},"^2",[195,274,275],{},[218,276,277],{},"第一层：项目根目录扫描",[195,279,280],{},"Claude 首先会查看项目根目录下的\"信号文件\"：",[282,283,284,297],"table",{},[285,286,287],"thead",{},[288,289,290,294],"tr",{},[291,292,293],"th",{},"文件类型",[291,295,296],{},"识别内容",[298,299,300,321,331,344,362],"tbody",{},[288,301,302,318],{},[303,304,305,308,309,308,312,308,315],"td",{},[235,306,307],{},"package.json"," \u002F ",[235,310,311],{},"Cargo.toml",[235,313,314],{},"pyproject.toml",[235,316,317],{},"go.mod",[303,319,320],{},"技术栈、依赖、脚本命令",[288,322,323,328],{},[303,324,325],{},[235,326,327],{},"README.md",[303,329,330],{},"项目描述、使用说明",[288,332,333,341],{},[303,334,335,308,338],{},[235,336,337],{},"Dockerfile",[235,339,340],{},"docker-compose.yml",[303,342,343],{},"部署架构、服务依赖",[288,345,346,351],{},[303,347,348],{},[235,349,350],{},".gitignore",[303,352,353,354,357,358,361],{},"项目类型线索（如 ",[235,355,356],{},"node_modules","、",[235,359,360],{},"target\u002F","）",[288,363,364,368],{},[303,365,366],{},[235,367,108],{},[303,369,370],{},"项目特定的 AI 指令",[195,372,373],{},[218,374,375],{},"第二层：目录结构解析",[195,377,378],{},"Claude 会递归扫描目录树，识别常见的项目结构模式：",[228,380,383],{"className":381,"code":382,"language":233},[231],"# 典型的 Web 项目结构\nsrc\u002F\n  ├── components\u002F     ← 识别为 UI 组件目录\n  ├── pages\u002F          ← 识别为路由页面（Next.js\u002FNuxt 模式）\n  ├── api\u002F            ← 识别为 API 路由\n  ├── utils\u002F          ← 工具函数\n  └── types\u002F          ← 类型定义\n\n# 典型的后端项目结构\napp\u002F\n  ├── models\u002F         ← 数据库模型\n  ├── routes\u002F         ← 路由处理器\n  ├── services\u002F       ← 业务逻辑\n  └── core\u002F           ← 核心配置\n",[235,384,382],{"__ignoreMap":237},[195,386,387],{},[218,388,389],{},"第三层：入口点发现",[195,391,392],{},"Claude 会寻找程序的执行入口：",[394,395,396,411,425,436],"ul",{},[397,398,399,226,402,357,405,357,408],"li",{},[218,400,401],{},"前端",[235,403,404],{},"index.html",[235,406,407],{},"main.tsx",[235,409,410],{},"app.vue",[397,412,413,226,416,357,419,357,422],{},[218,414,415],{},"后端",[235,417,418],{},"main.py",[235,420,421],{},"server.ts",[235,423,424],{},"app.js",[397,426,427,226,430,357,433],{},[218,428,429],{},"CLI 工具",[235,431,432],{},"cli.py",[235,434,435],{},"cmd\u002Froot.go",[397,437,438,226,441,357,444,357,447],{},[218,439,440],{},"库\u002F包",[235,442,443],{},"__init__.py",[235,445,446],{},"index.ts",[235,448,449],{},"lib.rs",[195,451,452],{},[218,453,454],{},"第四层：配置文件分析",[195,456,457],{},"通过读取框架配置文件，Claude 推断项目使用的技术细节：",[394,459,460,466,472,478,484],{},[397,461,462,465],{},[235,463,464],{},"vite.config.ts"," → Vite 构建工具",[397,467,468,471],{},[235,469,470],{},"next.config.js"," → Next.js 框架",[397,473,474,477],{},[235,475,476],{},"tailwind.config.js"," → Tailwind CSS",[397,479,480,483],{},[235,481,482],{},"jest.config.js"," → Jest 测试框架",[397,485,486,489],{},[235,487,488],{},".eslintrc"," → ESLint 规则",[210,491,493],{"id":492},"_13-文件选择算法为什么-claude-读了-a-而不是-b","1.3 文件选择算法：为什么 Claude 读了 A 而不是 B",[195,495,496,497,500],{},"Claude Code 内置了一套文件选择优先级算法",[223,498,499],{},"^3","。当你提出一个具体问题时，它会按以下优先级决定读取哪些文件：",[195,502,503],{},[218,504,505],{},"优先级 1：显式提及的文件",[195,507,508],{},"如果你直接提到了文件路径，Claude 会优先读取：",[228,510,514],{"className":511,"code":512,"language":513,"meta":237,"style":237},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","claude> 检查 src\u002Fauth.ts 中的登录逻辑\n# Claude 直接读取 src\u002Fauth.ts\n","bash",[235,515,516,538],{"__ignoreMap":237},[223,517,520,524,528,532,535],{"class":518,"line":519},"line",1,[223,521,523],{"class":522},"sBMFI","claude",[223,525,527],{"class":526},"sTEyZ","> ",[223,529,531],{"class":530},"sfazB","检查",[223,533,534],{"class":530}," src\u002Fauth.ts",[223,536,537],{"class":530}," 中的登录逻辑\n",[223,539,541],{"class":518,"line":540},2,[223,542,544],{"class":543},"sHwdD","# Claude 直接读取 src\u002Fauth.ts\n",[195,546,547],{},[218,548,549],{},"优先级 2：与问题语义相关的文件",[195,551,552],{},"Claude 使用关键词匹配和文件路径推断：",[228,554,556],{"className":511,"code":555,"language":513,"meta":237,"style":237},"claude> 用户认证是怎么实现的？\n# Claude 会搜索包含 \"auth\"、\"login\"、\"session\" 的文件名和内容\n",[235,557,558,567],{"__ignoreMap":237},[223,559,560,562,564],{"class":518,"line":519},[223,561,523],{"class":522},[223,563,527],{"class":526},[223,565,566],{"class":530},"用户认证是怎么实现的？\n",[223,568,569],{"class":518,"line":540},[223,570,571],{"class":543},"# Claude 会搜索包含 \"auth\"、\"login\"、\"session\" 的文件名和内容\n",[195,573,574],{},[218,575,576],{},"优先级 3：入口点和核心配置文件",[195,578,579],{},"对于架构级问题，Claude 会读取项目的核心骨架：",[228,581,583],{"className":511,"code":582,"language":513,"meta":237,"style":237},"claude> 解释这个项目的整体架构\n# Claude 读取 package.json、主入口文件、路由配置等\n",[235,584,585,594],{"__ignoreMap":237},[223,586,587,589,591],{"class":518,"line":519},[223,588,523],{"class":522},[223,590,527],{"class":526},[223,592,593],{"class":530},"解释这个项目的整体架构\n",[223,595,596],{"class":518,"line":540},[223,597,598],{"class":543},"# Claude 读取 package.json、主入口文件、路由配置等\n",[195,600,601],{},[218,602,603],{},"优先级 4：最近修改的文件",[195,605,606],{},"Claude 会查看 git 状态，优先关注当前工作区中已更改的文件：",[228,608,610],{"className":511,"code":609,"language":513,"meta":237,"style":237},"claude> 我最近的改动有什么问题？\n# Claude 读取 git diff 中涉及的文件\n",[235,611,612,621],{"__ignoreMap":237},[223,613,614,616,618],{"class":518,"line":519},[223,615,523],{"class":522},[223,617,527],{"class":526},[223,619,620],{"class":530},"我最近的改动有什么问题？\n",[223,622,623],{"class":518,"line":540},[223,624,625],{"class":543},"# Claude 读取 git diff 中涉及的文件\n",[195,627,628],{},[218,629,630],{},"优先级 5：测试文件",[195,632,633],{},"当问题涉及功能验证时，Claude 会查找对应的测试：",[228,635,637],{"className":511,"code":636,"language":513,"meta":237,"style":237},"claude> 这个函数应该怎么用？\n# Claude 可能读取对应的 .test.ts 文件看用法示例\n",[235,638,639,648],{"__ignoreMap":237},[223,640,641,643,645],{"class":518,"line":519},[223,642,523],{"class":522},[223,644,527],{"class":526},[223,646,647],{"class":530},"这个函数应该怎么用？\n",[223,649,650],{"class":518,"line":540},[223,651,652],{"class":543},"# Claude 可能读取对应的 .test.ts 文件看用法示例\n",[210,654,656],{"id":655},"_14-内置工具集claude-的感官系统","1.4 内置工具集：Claude 的\"感官系统\"",[195,658,659,660,226],{},"Claude Code 通过一套内置工具来感知代码库",[223,661,225],{},[282,663,664,677],{},[285,665,666],{},[288,667,668,671,674],{},[291,669,670],{},"工具类别",[291,672,673],{},"具体能力",[291,675,676],{},"用途",[298,678,679,692,705,718,731],{},[288,680,681,686,689],{},[303,682,683],{},[218,684,685],{},"文件操作",[303,687,688],{},"Read、Edit、Write、Glob",[303,690,691],{},"读取、修改、创建文件，按模式匹配文件",[288,693,694,699,702],{},[303,695,696],{},[218,697,698],{},"搜索",[303,700,701],{},"Grep、Glob",[303,703,704],{},"按正则搜索内容，按模式查找文件",[288,706,707,712,715],{},[303,708,709],{},[218,710,711],{},"执行",[303,713,714],{},"Bash",[303,716,717],{},"运行 shell 命令、测试、git 操作",[288,719,720,725,728],{},[303,721,722],{},[218,723,724],{},"代码智能",[303,726,727],{},"类型检查、定义跳转、引用查找",[303,729,730],{},"理解代码间的依赖关系",[288,732,733,738,741],{},[303,734,735],{},[218,736,737],{},"委派",[303,739,740],{},"Task（Subagent）",[303,742,743],{},"将探索任务交给子代理",[195,745,746],{},"这些工具的组合使用，构成了 Claude 探索代码库的基础能力。例如，当 Claude 需要理解一个函数时，它可能会：",[748,749,750,757,763,768],"ol",{},[397,751,752,753,756],{},"用 ",[235,754,755],{},"Read"," 读取函数定义",[397,758,752,759,762],{},[235,760,761],{},"Grep"," 查找所有调用该函数的地方",[397,764,752,765,767],{},[235,766,755],{}," 读取关键的调用点",[397,769,752,770,772],{},[235,771,714],{}," 运行测试验证理解",[202,774],{},[205,776,778],{"id":777},"二项目结构分析从混沌到清晰","二、项目结构分析：从混沌到清晰",[210,780,782],{"id":781},"_21-技术栈识别claude-如何猜你用什么","2.1 技术栈识别：Claude 如何\"猜\"你用什么",[195,784,785],{},"Claude Code 的技术栈识别是一个多信号融合的过程。当你首次进入一个项目，可以通过以下方式快速建立技术栈认知：",[195,787,788],{},[218,789,790],{},"提问模板 1：技术栈概览",[228,792,794],{"className":511,"code":793,"language":513,"meta":237,"style":237},"claude> 分析这个项目的技术栈。列出：1) 主要编程语言和框架 2) 构建工具 3) 测试框架 4) 数据库\u002FORM 5) 部署方式\n",[235,795,796],{"__ignoreMap":237},[223,797,798,800,802,805],{"class":518,"line":519},[223,799,523],{"class":522},[223,801,527],{"class":526},[223,803,804],{"class":530},"分析这个项目的技术栈。列出：1",[223,806,807],{"class":526},") 主要编程语言和框架 2) 构建工具 3) 测试框架 4) 数据库\u002FORM 5) 部署方式\n",[195,809,810,226],{},[218,811,812],{},"预期响应",[228,814,817],{"className":815,"code":816,"language":233},[231],"基于对项目文件的分析，技术栈如下：\n\n1. 主要编程语言和框架：\n   - TypeScript（主语言）\n   - Next.js 15（React 框架，App Router）\n   - React 19（UI 库）\n\n2. 构建工具：\n   - Vite 6（开发服务器和构建）\n   - pnpm（包管理器）\n\n3. 测试框架：\n   - Vitest（单元测试）\n   - Playwright（E2E 测试）\n\n4. 数据库\u002FORM：\n   - PostgreSQL（数据库）\n   - Drizzle ORM（类型安全的数据库操作）\n\n5. 部署方式：\n   - Docker（容器化）\n   - 从 Dockerfile 推断可能使用 AWS ECS 或类似平台\n",[235,818,816],{"__ignoreMap":237},[195,820,821],{},[218,822,823],{},"提问模板 2：依赖分析",[228,825,827],{"className":511,"code":826,"language":513,"meta":237,"style":237},"claude> 分析 package.json 中的关键依赖。哪些是直接依赖？哪些是开发依赖？有没有已知的安全风险或过时包？\n",[235,828,829],{"__ignoreMap":237},[223,830,831,833,835,838,841],{"class":518,"line":519},[223,832,523],{"class":522},[223,834,527],{"class":526},[223,836,837],{"class":530},"分析",[223,839,840],{"class":530}," package.json",[223,842,843],{"class":530}," 中的关键依赖。哪些是直接依赖？哪些是开发依赖？有没有已知的安全风险或过时包？\n",[210,845,847],{"id":846},"_22-目录结构解析理解项目的地形","2.2 目录结构解析：理解项目的\"地形\"",[195,849,850],{},"目录结构是项目架构的最直观表达。Claude 可以帮你快速建立对项目\"地形\"的认知：",[195,852,853],{},[218,854,855],{},"提问模板 3：目录结构解释",[228,857,859],{"className":511,"code":858,"language":513,"meta":237,"style":237},"claude> 解释这个项目的目录结构。每个主要目录的作用是什么？遵循什么设计模式？\n",[235,860,861],{"__ignoreMap":237},[223,862,863,865,867],{"class":518,"line":519},[223,864,523],{"class":522},[223,866,527],{"class":526},[223,868,869],{"class":530},"解释这个项目的目录结构。每个主要目录的作用是什么？遵循什么设计模式？\n",[195,871,872,874],{},[218,873,812],{},"（以典型 Next.js 项目为例）：",[228,876,879],{"className":877,"code":878,"language":233},[231],"项目采用 Next.js App Router 的标准结构，遵循功能模块组织原则：\n\nsrc\u002F\n├── app\u002F                    # Next.js App Router 路由\n│   ├── (marketing)\u002F        # 路由组：营销页面（无共享布局）\n│   ├── dashboard\u002F          # 仪表盘路由\n│   ├── api\u002F                # API 路由端点\n│   └── layout.tsx          # 根布局\n├── components\u002F\n│   ├── ui\u002F                 # 基础 UI 组件（Button, Input 等）\n│   └── features\u002F           # 功能组件（与业务逻辑耦合）\n├── lib\u002F\n│   ├── db\u002F                 # 数据库相关（schema, queries）\n│   ├── auth\u002F               # 认证工具\n│   └── utils\u002F              # 通用工具函数\n├── types\u002F                  # 全局 TypeScript 类型\n└── hooks\u002F                  # 自定义 React Hooks\n\n设计模式：\n- 使用 Barrel exports（index.ts）简化导入\n- UI 组件与功能组件分离，便于复用\n- API 路由与页面路由共存，全栈开发\n",[235,880,878],{"__ignoreMap":237},[195,882,883],{},[218,884,885],{},"提问模板 4：寻找关键文件",[228,887,889],{"className":511,"code":888,"language":513,"meta":237,"style":237},"claude> 列出这个项目中最重要的 10 个文件，并说明每个文件的作用\n",[235,890,891],{"__ignoreMap":237},[223,892,893,895,897,900,904],{"class":518,"line":519},[223,894,523],{"class":522},[223,896,527],{"class":526},[223,898,899],{"class":530},"列出这个项目中最重要的",[223,901,903],{"class":902},"sbssI"," 10",[223,905,906],{"class":530}," 个文件，并说明每个文件的作用\n",[210,908,910],{"id":909},"_23-入口点发现程序的起点在哪里","2.3 入口点发现：程序的\"起点\"在哪里",[195,912,913],{},"理解入口点是理解程序执行流程的关键。不同项目类型的入口点各不相同：",[195,915,916],{},[218,917,918],{},"提问模板 5：入口点分析",[228,920,922],{"className":511,"code":921,"language":513,"meta":237,"style":237},"claude> 找出这个项目的所有入口点：1) 应用程序入口 2) 库\u002F包的导出入口 3) 测试入口 4) CLI 入口（如果有）\n",[235,923,924],{"__ignoreMap":237},[223,925,926,928,930,933],{"class":518,"line":519},[223,927,523],{"class":522},[223,929,527],{"class":526},[223,931,932],{"class":530},"找出这个项目的所有入口点：1",[223,934,935],{"class":526},") 应用程序入口 2) 库\u002F包的导出入口 3) 测试入口 4) CLI 入口（如果有）\n",[195,937,938,940],{},[218,939,812],{},"（以全栈项目为例）：",[228,942,945],{"className":943,"code":944,"language":233},[231],"入口点分析：\n\n1. 应用程序入口：\n   - 前端：src\u002Fapp\u002Flayout.tsx（Next.js 根布局）\n   - 后端 API：src\u002Fapp\u002Fapi\u002F[[...route]]\u002Froute.ts（API 路由聚合）\n\n2. 库\u002F包导出：\n   - src\u002Findex.ts（主包导出）\n   - src\u002Fcomponents\u002Fui\u002Findex.ts（UI 组件桶文件）\n\n3. 测试入口：\n   - vitest.config.ts 中定义的入口\n   - src\u002F**\u002F*.test.ts 模式匹配\n\n4. CLI 入口：\n   - bin\u002Fcli.js（如果项目包含 CLI 工具）\n",[235,946,944],{"__ignoreMap":237},[202,948],{},[205,950,952],{"id":951},"三代码库导航精准定位与深度探索","三、代码库导航：精准定位与深度探索",[210,954,956],{"id":955},"_31-文件搜索从大海捞针到精准定位","3.1 文件搜索：从\"大海捞针\"到\"精准定位\"",[195,958,959],{},"Claude Code 提供了多种文件搜索方式，掌握它们可以大幅提升导航效率。",[195,961,962],{},[218,963,964],{},"方式 1：自然语言描述搜索",[228,966,968],{"className":511,"code":967,"language":513,"meta":237,"style":237},"claude> 找到处理用户登录逻辑的文件\n# Claude 自动搜索包含 login、auth、signin 等关键词的文件\n",[235,969,970,979],{"__ignoreMap":237},[223,971,972,974,976],{"class":518,"line":519},[223,973,523],{"class":522},[223,975,527],{"class":526},[223,977,978],{"class":530},"找到处理用户登录逻辑的文件\n",[223,980,981],{"class":518,"line":540},[223,982,983],{"class":543},"# Claude 自动搜索包含 login、auth、signin 等关键词的文件\n",[195,985,986],{},[218,987,988],{},"方式 2：使用 @ 符号快速引用",[228,990,992],{"className":511,"code":991,"language":513,"meta":237,"style":237},"claude> 看看 @src\u002Fauth.ts 里的登录函数有什么问题\n# @ 触发文件路径自动补全，直接读取指定文件\n",[235,993,994,1009],{"__ignoreMap":237},[223,995,996,998,1000,1003,1006],{"class":518,"line":519},[223,997,523],{"class":522},[223,999,527],{"class":526},[223,1001,1002],{"class":530},"看看",[223,1004,1005],{"class":530}," @src\u002Fauth.ts",[223,1007,1008],{"class":530}," 里的登录函数有什么问题\n",[223,1010,1011],{"class":518,"line":540},[223,1012,1013],{"class":543},"# @ 触发文件路径自动补全，直接读取指定文件\n",[195,1015,1016],{},[218,1017,1018],{},"方式 3：让 Claude 使用 Grep 精确搜索",[228,1020,1022],{"className":511,"code":1021,"language":513,"meta":237,"style":237},"claude> 搜索所有包含 \"JWT\" 这个词的文件，并显示上下文\n# Claude 使用 Grep 工具执行正则搜索\n",[235,1023,1024,1046],{"__ignoreMap":237},[223,1025,1026,1028,1030,1033,1037,1040,1043],{"class":518,"line":519},[223,1027,523],{"class":522},[223,1029,527],{"class":526},[223,1031,1032],{"class":530},"搜索所有包含",[223,1034,1036],{"class":1035},"sMK4o"," \"",[223,1038,1039],{"class":530},"JWT",[223,1041,1042],{"class":1035},"\"",[223,1044,1045],{"class":530}," 这个词的文件，并显示上下文\n",[223,1047,1048],{"class":518,"line":540},[223,1049,1050],{"class":543},"# Claude 使用 Grep 工具执行正则搜索\n",[195,1052,1053],{},[218,1054,1055],{},"方式 4：模式匹配（Glob）",[228,1057,1059],{"className":511,"code":1058,"language":513,"meta":237,"style":237},"claude> 列出所有以 .service.ts 结尾的文件\n# Claude 使用 Glob 工具匹配文件模式\n",[235,1060,1061,1076],{"__ignoreMap":237},[223,1062,1063,1065,1067,1070,1073],{"class":518,"line":519},[223,1064,523],{"class":522},[223,1066,527],{"class":526},[223,1068,1069],{"class":530},"列出所有以",[223,1071,1072],{"class":530}," .service.ts",[223,1074,1075],{"class":530}," 结尾的文件\n",[223,1077,1078],{"class":518,"line":540},[223,1079,1080],{"class":543},"# Claude 使用 Glob 工具匹配文件模式\n",[210,1082,1084],{"id":1083},"_32-符号跳转追踪函数和类型的定义","3.2 符号跳转：追踪函数和类型的定义",[195,1086,1087],{},"Claude Code 支持代码智能功能，可以帮助你追踪符号的定义和引用：",[195,1089,1090],{},[218,1091,1092],{},"提问模板 6：符号追踪",[228,1094,1096],{"className":511,"code":1095,"language":513,"meta":237,"style":237},"claude> 找到 `validateUser` 函数的定义，以及所有调用它的地方\n",[235,1097,1098],{"__ignoreMap":237},[223,1099,1100,1102,1104,1107,1110,1113,1116],{"class":518,"line":519},[223,1101,523],{"class":522},[223,1103,527],{"class":526},[223,1105,1106],{"class":530},"找到",[223,1108,1109],{"class":1035}," `",[223,1111,1112],{"class":522},"validateUser",[223,1114,1115],{"class":1035},"`",[223,1117,1118],{"class":522}," 函数的定义，以及所有调用它的地方\n",[195,1120,1121,226],{},[218,1122,812],{},[228,1124,1127],{"className":1125,"code":1126,"language":233},[231],"`validateUser` 函数定义在 src\u002Flib\u002Fauth.ts:45：\n\n```typescript\nexport async function validateUser(\n  email: string,\n  password: string\n): Promise\u003CUser | null> {\n  \u002F\u002F ... 实现\n}\n",[235,1128,1126],{"__ignoreMap":237},[195,1130,1131],{},"调用位置：",[748,1133,1134,1137,1140],{},[397,1135,1136],{},"src\u002Fapp\u002Fapi\u002Fauth\u002Flogin\u002Froute.ts:12 — 登录 API 端点",[397,1138,1139],{},"src\u002Fapp\u002Fapi\u002Fauth\u002Frefresh\u002Froute.ts:8 — Token 刷新端点",[397,1141,1142],{},"src\u002Fcomponents\u002FLoginForm.tsx:34 — 前端登录表单",[228,1144,1147],{"className":1145,"code":1146,"language":233},[231],"\n**提问模板 7：类型追踪**\n\n```bash\nclaude> `User` 类型在哪里定义？哪些文件使用了这个类型？\n",[235,1148,1146],{"__ignoreMap":237},[210,1150,1152],{"id":1151},"_33-依赖关系追踪理解模块间的血脉","3.3 依赖关系追踪：理解模块间的\"血脉\"",[195,1154,1155],{},"理解模块间的依赖关系是掌握大型项目的关键。Claude 可以帮你绘制依赖图谱：",[195,1157,1158],{},[218,1159,1160],{},"提问模板 8：依赖分析",[228,1162,1164],{"className":511,"code":1163,"language":513,"meta":237,"style":237},"claude> 分析 src\u002Fservices\u002F 目录下各模块的依赖关系。哪个模块被最多其他模块引用？有没有循环依赖？\n",[235,1165,1166],{"__ignoreMap":237},[223,1167,1168,1170,1172,1174,1177],{"class":518,"line":519},[223,1169,523],{"class":522},[223,1171,527],{"class":526},[223,1173,837],{"class":530},[223,1175,1176],{"class":530}," src\u002Fservices\u002F",[223,1178,1179],{"class":530}," 目录下各模块的依赖关系。哪个模块被最多其他模块引用？有没有循环依赖？\n",[195,1181,1182],{},[218,1183,1184],{},"提问模板 9：数据流追踪",[228,1186,1188],{"className":511,"code":1187,"language":513,"meta":237,"style":237},"claude> 追踪一个用户注册请求从 API 入口到数据库的完整数据流。列出涉及的所有文件和函数调用链。\n",[235,1189,1190],{"__ignoreMap":237},[223,1191,1192,1194,1196,1199,1202],{"class":518,"line":519},[223,1193,523],{"class":522},[223,1195,527],{"class":526},[223,1197,1198],{"class":530},"追踪一个用户注册请求从",[223,1200,1201],{"class":530}," API",[223,1203,1204],{"class":530}," 入口到数据库的完整数据流。列出涉及的所有文件和函数调用链。\n",[195,1206,1207,226],{},[218,1208,812],{},[228,1210,1213],{"className":1211,"code":1212,"language":233},[231],"用户注册数据流：\n\n1. API 入口\n   src\u002Fapp\u002Fapi\u002Fauth\u002Fregister\u002Froute.ts\n   └── POST handler (line 15)\n\n2. 输入验证\n   └── validateRegistrationInput()\n       src\u002Flib\u002Fvalidation\u002Fauth.ts:23\n\n3. 业务逻辑\n   └── authService.register()\n       src\u002Fservices\u002Fauth.ts:45\n       ├── checkExistingUser() — src\u002Fservices\u002Fuser.ts:12\n       ├── hashPassword() — src\u002Flib\u002Fcrypto.ts:8\n       └── createUser() — src\u002Fservices\u002Fuser.ts:34\n\n4. 数据库操作\n   └── db.insert(users).values(...)\n       src\u002Flib\u002Fdb\u002Fqueries\u002Fuser.ts:56\n       └── 使用 Drizzle ORM 的 schema\n           src\u002Flib\u002Fdb\u002Fschema.ts:23 (users 表定义)\n\n5. 响应构造\n   └── 返回 { success: true, user: {...} }\n       src\u002Fapp\u002Fapi\u002Fauth\u002Fregister\u002Froute.ts:42\n\n涉及文件：6 个\n函数调用深度：4 层\n",[235,1214,1212],{"__ignoreMap":237},[210,1216,1218],{"id":1217},"_34-使用-subagent-进行并行探索","3.4 使用 Subagent 进行并行探索",[195,1220,1221,1222,1225,1226,1229],{},"对于大型代码库，Claude Code 的 ",[218,1223,1224],{},"Subagent（子代理）"," 功能是一个强大的探索工具",[223,1227,1228],{},"^4","。Subagent 在独立的上下文窗口中运行，不会消耗主会话的 token 预算。",[195,1231,1232],{},[218,1233,1234],{},"提问模板 10：委派探索任务给 Subagent",[228,1236,1238],{"className":511,"code":1237,"language":513,"meta":237,"style":237},"claude> 使用 subagent 并行探索：1) 认证模块的代码结构 2) 支付模块的代码结构 3) 通知模块的代码结构。每个 subagent 返回该模块的关键文件列表和职责说明。\n",[235,1239,1240],{"__ignoreMap":237},[223,1241,1242,1244,1246,1249,1252,1255],{"class":518,"line":519},[223,1243,523],{"class":522},[223,1245,527],{"class":526},[223,1247,1248],{"class":530},"使用",[223,1250,1251],{"class":530}," subagent",[223,1253,1254],{"class":530}," 并行探索：1",[223,1256,1257],{"class":526},") 认证模块的代码结构 2) 支付模块的代码结构 3) 通知模块的代码结构。每个 subagent 返回该模块的关键文件列表和职责说明。\n",[195,1259,1260,1263,226],{},[218,1261,1262],{},"Subagent 的三种类型",[223,1264,1228],{},[282,1266,1267,1282],{},[285,1268,1269],{},[288,1270,1271,1274,1277,1280],{},[291,1272,1273],{},"类型",[291,1275,1276],{},"模型",[291,1278,1279],{},"权限",[291,1281,676],{},[298,1283,1284,1300,1316],{},[288,1285,1286,1291,1294,1297],{},[303,1287,1288],{},[218,1289,1290],{},"Explore",[303,1292,1293],{},"Haiku（快速、低成本）",[303,1295,1296],{},"只读",[303,1298,1299],{},"代码库搜索和分析",[288,1301,1302,1307,1310,1313],{},[303,1303,1304],{},[218,1305,1306],{},"General-purpose",[303,1308,1309],{},"Sonnet",[303,1311,1312],{},"读写",[303,1314,1315],{},"复杂多步骤任务",[288,1317,1318,1323,1325,1327],{},[303,1319,1320],{},[218,1321,1322],{},"Plan",[303,1324,1309],{},[303,1326,1296],{},[303,1328,1329],{},"计划阶段的研究",[195,1331,1332,226],{},[218,1333,1334],{},"实际使用示例",[228,1336,1338],{"className":511,"code":1337,"language":513,"meta":237,"style":237},"claude> 使用 explore subagent 查找所有与 WebSocket 相关的代码。返回文件路径、关键代码片段和整体架构说明。\n",[235,1339,1340],{"__ignoreMap":237},[223,1341,1342,1344,1346,1348,1351,1353,1356,1359],{"class":518,"line":519},[223,1343,523],{"class":522},[223,1345,527],{"class":526},[223,1347,1248],{"class":530},[223,1349,1350],{"class":530}," explore",[223,1352,1251],{"class":530},[223,1354,1355],{"class":530}," 查找所有与",[223,1357,1358],{"class":530}," WebSocket",[223,1360,1361],{"class":530}," 相关的代码。返回文件路径、关键代码片段和整体架构说明。\n",[202,1363],{},[205,1365,1367],{"id":1366},"四上下文构建claude-如何决定读什么","四、上下文构建：Claude 如何决定读什么",[210,1369,1371],{"id":1370},"_41-上下文窗口的构成","4.1 上下文窗口的构成",[195,1373,1374,1375,226],{},"Claude Code 的上下文窗口是一个有限的\"工作记忆\"空间，包含以下内容",[223,1376,1377],{},"^5",[282,1379,1380,1393],{},[285,1381,1382],{},[288,1383,1384,1387,1390],{},[291,1385,1386],{},"内容类别",[291,1388,1389],{},"说明",[291,1391,1392],{},"占比估算",[298,1394,1395,1406,1417,1428,1439,1449],{},[288,1396,1397,1400,1403],{},[303,1398,1399],{},"系统提示和 CLAUDE.md",[303,1401,1402],{},"项目指令、规则",[303,1404,1405],{},"~5-10%",[288,1407,1408,1411,1414],{},[303,1409,1410],{},"用户消息",[303,1412,1413],{},"你的提问和指令",[303,1415,1416],{},"~10-15%",[288,1418,1419,1422,1425],{},[303,1420,1421],{},"Claude 的响应",[303,1423,1424],{},"生成的回答和代码",[303,1426,1427],{},"~25-35%",[288,1429,1430,1433,1436],{},[303,1431,1432],{},"文件读取",[303,1434,1435],{},"读取的文件内容",[303,1437,1438],{},"~20-30%",[288,1440,1441,1444,1447],{},[303,1442,1443],{},"命令输出",[303,1445,1446],{},"终端命令的执行结果",[303,1448,1405],{},[288,1450,1451,1454,1457],{},[303,1452,1453],{},"工具输出",[303,1455,1456],{},"搜索、分析结果",[303,1458,1405],{},[210,1460,1462],{"id":1461},"_42-优先级策略什么最重要","4.2 优先级策略：什么最重要",[195,1464,1465,1466,226],{},"Claude Code 在决定保留哪些上下文时，遵循以下优先级",[223,1467,1377],{},[195,1469,1470,226],{},[218,1471,1472],{},"最高优先级（始终保留）",[394,1474,1475,1478,1481],{},[397,1476,1477],{},"系统提示和 CLAUDE.md 内容",[397,1479,1480],{},"最近的 3-5 轮对话",[397,1482,1483],{},"当前正在编辑的文件",[195,1485,1486,226],{},[218,1487,1488],{},"高优先级（尽量保留）",[394,1490,1491,1494,1497],{},[397,1492,1493],{},"用户明确提及的文件",[397,1495,1496],{},"当前任务直接相关的代码",[397,1498,1499],{},"最近的命令输出",[195,1501,1502,226],{},[218,1503,1504],{},"可压缩（需要时总结）",[394,1506,1507,1514,1517],{},[397,1508,1509,1510,1513],{},"早期的对话历史（可用 ",[235,1511,1512],{},"\u002Fcompact"," 压缩）",[397,1515,1516],{},"已完成的探索结果",[397,1518,1519],{},"不相关的文件内容",[195,1521,1522,226],{},[218,1523,1524],{},"最低优先级（首先丢弃）",[394,1526,1527,1530,1533],{},[397,1528,1529],{},"过时的工具输出",[397,1531,1532],{},"已验证通过的测试输出",[397,1534,1535],{},"与当前任务无关的文件",[210,1537,1539,1540,1543],{"id":1538},"_43-使用-context-查看当前上下文状态","4.3 使用 ",[235,1541,1542],{},"\u002Fcontext"," 查看当前上下文状态",[195,1545,1546,1547,1549],{},"Claude Code 提供了 ",[235,1548,1542],{}," 命令，让你实时了解上下文使用情况：",[228,1551,1553],{"className":511,"code":1552,"language":513,"meta":237,"style":237},"claude> \u002Fcontext\n",[235,1554,1555],{"__ignoreMap":237},[223,1556,1557,1559,1561],{"class":518,"line":519},[223,1558,523],{"class":522},[223,1560,527],{"class":526},[223,1562,1563],{"class":530},"\u002Fcontext\n",[195,1565,1566,226],{},[218,1567,1568],{},"预期输出",[228,1570,1573],{"className":1571,"code":1572,"language":233},[231],"Context usage: 68% (142,000 \u002F 200,000 tokens)\n\nBreakdown:\n- System prompt + CLAUDE.md: 12,000 tokens (8%)\n- Conversation history: 45,000 tokens (32%)\n- File reads: 62,000 tokens (44%)\n- Command outputs: 18,000 tokens (13%)\n- Tool definitions: 5,000 tokens (4%)\n\nOptimization suggestions:\n- Run \u002Fcompact to free up ~20,000 tokens\n- 5 files in context haven't been referenced in 10+ turns\n- Consider starting a new session for a different task\n",[235,1574,1572],{"__ignoreMap":237},[210,1576,1578,1579,1581],{"id":1577},"_44-使用-compact-主动管理上下文","4.4 使用 ",[235,1580,1512],{}," 主动管理上下文",[195,1583,1584,1585,1587,1588,226],{},"当上下文接近上限时，",[235,1586,1512],{}," 命令可以总结并压缩对话历史",[223,1589,1590],{},"^6",[228,1592,1594],{"className":511,"code":1593,"language":513,"meta":237,"style":237},"claude> \u002Fcompact 保留关于认证模块重构的决策\n",[235,1595,1596],{"__ignoreMap":237},[223,1597,1598,1600,1602,1604],{"class":518,"line":519},[223,1599,523],{"class":522},[223,1601,527],{"class":526},[223,1603,1512],{"class":530},[223,1605,1606],{"class":530}," 保留关于认证模块重构的决策\n",[195,1608,1609,1611],{},[235,1610,1512],{}," 的工作原理：",[394,1613,1614,1617,1620,1623],{},[397,1615,1616],{},"保留关键决策和结论",[397,1618,1619],{},"丢弃详细的探索过程和中间步骤",[397,1621,1622],{},"保留文件修改记录",[397,1624,1625],{},"释放 20-40% 的上下文空间",[195,1627,1628,1631,226],{},[218,1629,1630],{},"什么在压缩后保留",[223,1632,1377],{},[282,1634,1635,1645],{},[285,1636,1637],{},[288,1638,1639,1642],{},[291,1640,1641],{},"机制",[291,1643,1644],{},"压缩后状态",[298,1646,1647,1655,1663,1670,1678,1686],{},[288,1648,1649,1652],{},[303,1650,1651],{},"系统提示和输出样式",[303,1653,1654],{},"不变（不在消息历史中）",[288,1656,1657,1660],{},[303,1658,1659],{},"项目根目录 CLAUDE.md",[303,1661,1662],{},"从磁盘重新注入",[288,1664,1665,1668],{},[303,1666,1667],{},"自动记忆",[303,1669,1662],{},[288,1671,1672,1675],{},[303,1673,1674],{},"路径限定规则",[303,1676,1677],{},"丢失，直到再次读取匹配文件",[288,1679,1680,1683],{},[303,1681,1682],{},"嵌套 CLAUDE.md",[303,1684,1685],{},"丢失，直到再次读取该子目录文件",[288,1687,1688,1691],{},[303,1689,1690],{},"已调用的 Skill",[303,1692,1693],{},"重新注入，但受 5,000 token\u002FSkill 和 25,000 token 总计上限限制",[202,1695],{},[205,1697,1699],{"id":1698},"五与-claude-对话的最佳实践","五、与 Claude 对话的最佳实践",[210,1701,1703],{"id":1702},"_51-如何描述项目给-claude-一张地图","5.1 如何描述项目：给 Claude 一张\"地图\"",[195,1705,1706],{},"最有效的项目描述方式是提供一张清晰的\"地图\"，让 Claude 知道在哪里找什么。",[195,1708,1709],{},[218,1710,1711],{},"最佳实践 1：使用 CLAUDE.md 提供持久上下文",[195,1713,1714,1716,1717,1720,1721,1723],{},[235,1715,108],{}," 是 Claude Code 最重要的上下文机制",[223,1718,1719],{},"^7","。放置在项目根目录的 ",[235,1722,108],{}," 会在每个会话开始时自动加载，成为系统提示的一部分。",[228,1725,1729],{"className":1726,"code":1727,"language":1728,"meta":237,"style":237},"language-markdown shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003C!-- CLAUDE.md 示例 -->\n# 项目上下文\n\n## 项目概述\n这是一个基于 Next.js 15 的全栈 SaaS 应用，使用 TypeScript 和 Tailwind CSS。\n\n## 关键目录\n- `src\u002Fapp\u002F` — App Router 页面和 API 路由\n- `src\u002Fcomponents\u002Fui\u002F` — 基础 UI 组件（shadcn\u002Fui）\n- `src\u002Fcomponents\u002Ffeatures\u002F` — 业务功能组件\n- `src\u002Flib\u002Fdb\u002F` — 数据库 schema 和查询\n- `src\u002Flib\u002Fauth\u002F` — 认证相关工具\n- `src\u002Fservices\u002F` — 业务逻辑层\n\n## 技术栈\n- Next.js 15 + React 19\n- TypeScript 5.7\n- Tailwind CSS 4\n- Drizzle ORM + PostgreSQL\n- NextAuth.js v5\n- Vitest + Playwright\n\n## 代码规范\n- 所有函数必须有类型注解\n- 使用 async\u002Fawait，避免回调\n- 错误处理使用 Result 模式，不抛异常\n- UI 组件使用 cn() 工具合并 Tailwind 类名\n\n## 常用命令\n```bash\npnpm dev          # 启动开发服务器\npnpm test         # 运行单元测试\npnpm test:e2e     # 运行 E2E 测试\npnpm db:generate  # 生成 Drizzle 迁移\npnpm db:migrate   # 执行迁移\n","markdown",[235,1730,1731,1736,1744,1751,1760,1766,1771,1779,1795,1810,1825,1840,1855,1870,1875,1883,1891,1899,1907,1915,1923,1931,1936,1944,1952,1960,1968,1976,1981,1989,1999,2011,2022,2033,2044],{"__ignoreMap":237},[223,1732,1733],{"class":518,"line":519},[223,1734,1735],{"class":543},"\u003C!-- CLAUDE.md 示例 -->\n",[223,1737,1738,1741],{"class":518,"line":540},[223,1739,1740],{"class":1035},"# ",[223,1742,1743],{"class":522},"项目上下文\n",[223,1745,1747],{"class":518,"line":1746},3,[223,1748,1750],{"emptyLinePlaceholder":1749},true,"\n",[223,1752,1754,1757],{"class":518,"line":1753},4,[223,1755,1756],{"class":1035},"## ",[223,1758,1759],{"class":522},"项目概述\n",[223,1761,1763],{"class":518,"line":1762},5,[223,1764,1765],{"class":526},"这是一个基于 Next.js 15 的全栈 SaaS 应用，使用 TypeScript 和 Tailwind CSS。\n",[223,1767,1769],{"class":518,"line":1768},6,[223,1770,1750],{"emptyLinePlaceholder":1749},[223,1772,1774,1776],{"class":518,"line":1773},7,[223,1775,1756],{"class":1035},[223,1777,1778],{"class":522},"关键目录\n",[223,1780,1782,1785,1787,1790,1792],{"class":518,"line":1781},8,[223,1783,1784],{"class":1035},"-",[223,1786,1109],{"class":1035},[223,1788,1789],{"class":530},"src\u002Fapp\u002F",[223,1791,1115],{"class":1035},[223,1793,1794],{"class":526}," — App Router 页面和 API 路由\n",[223,1796,1798,1800,1802,1805,1807],{"class":518,"line":1797},9,[223,1799,1784],{"class":1035},[223,1801,1109],{"class":1035},[223,1803,1804],{"class":530},"src\u002Fcomponents\u002Fui\u002F",[223,1806,1115],{"class":1035},[223,1808,1809],{"class":526}," — 基础 UI 组件（shadcn\u002Fui）\n",[223,1811,1813,1815,1817,1820,1822],{"class":518,"line":1812},10,[223,1814,1784],{"class":1035},[223,1816,1109],{"class":1035},[223,1818,1819],{"class":530},"src\u002Fcomponents\u002Ffeatures\u002F",[223,1821,1115],{"class":1035},[223,1823,1824],{"class":526}," — 业务功能组件\n",[223,1826,1828,1830,1832,1835,1837],{"class":518,"line":1827},11,[223,1829,1784],{"class":1035},[223,1831,1109],{"class":1035},[223,1833,1834],{"class":530},"src\u002Flib\u002Fdb\u002F",[223,1836,1115],{"class":1035},[223,1838,1839],{"class":526}," — 数据库 schema 和查询\n",[223,1841,1843,1845,1847,1850,1852],{"class":518,"line":1842},12,[223,1844,1784],{"class":1035},[223,1846,1109],{"class":1035},[223,1848,1849],{"class":530},"src\u002Flib\u002Fauth\u002F",[223,1851,1115],{"class":1035},[223,1853,1854],{"class":526}," — 认证相关工具\n",[223,1856,1858,1860,1862,1865,1867],{"class":518,"line":1857},13,[223,1859,1784],{"class":1035},[223,1861,1109],{"class":1035},[223,1863,1864],{"class":530},"src\u002Fservices\u002F",[223,1866,1115],{"class":1035},[223,1868,1869],{"class":526}," — 业务逻辑层\n",[223,1871,1873],{"class":518,"line":1872},14,[223,1874,1750],{"emptyLinePlaceholder":1749},[223,1876,1878,1880],{"class":518,"line":1877},15,[223,1879,1756],{"class":1035},[223,1881,1882],{"class":522},"技术栈\n",[223,1884,1886,1888],{"class":518,"line":1885},16,[223,1887,1784],{"class":1035},[223,1889,1890],{"class":526}," Next.js 15 + React 19\n",[223,1892,1894,1896],{"class":518,"line":1893},17,[223,1895,1784],{"class":1035},[223,1897,1898],{"class":526}," TypeScript 5.7\n",[223,1900,1902,1904],{"class":518,"line":1901},18,[223,1903,1784],{"class":1035},[223,1905,1906],{"class":526}," Tailwind CSS 4\n",[223,1908,1910,1912],{"class":518,"line":1909},19,[223,1911,1784],{"class":1035},[223,1913,1914],{"class":526}," Drizzle ORM + PostgreSQL\n",[223,1916,1918,1920],{"class":518,"line":1917},20,[223,1919,1784],{"class":1035},[223,1921,1922],{"class":526}," NextAuth.js v5\n",[223,1924,1926,1928],{"class":518,"line":1925},21,[223,1927,1784],{"class":1035},[223,1929,1930],{"class":526}," Vitest + Playwright\n",[223,1932,1934],{"class":518,"line":1933},22,[223,1935,1750],{"emptyLinePlaceholder":1749},[223,1937,1939,1941],{"class":518,"line":1938},23,[223,1940,1756],{"class":1035},[223,1942,1943],{"class":522},"代码规范\n",[223,1945,1947,1949],{"class":518,"line":1946},24,[223,1948,1784],{"class":1035},[223,1950,1951],{"class":526}," 所有函数必须有类型注解\n",[223,1953,1955,1957],{"class":518,"line":1954},25,[223,1956,1784],{"class":1035},[223,1958,1959],{"class":526}," 使用 async\u002Fawait，避免回调\n",[223,1961,1963,1965],{"class":518,"line":1962},26,[223,1964,1784],{"class":1035},[223,1966,1967],{"class":526}," 错误处理使用 Result 模式，不抛异常\n",[223,1969,1971,1973],{"class":518,"line":1970},27,[223,1972,1784],{"class":1035},[223,1974,1975],{"class":526}," UI 组件使用 cn() 工具合并 Tailwind 类名\n",[223,1977,1979],{"class":518,"line":1978},28,[223,1980,1750],{"emptyLinePlaceholder":1749},[223,1982,1984,1986],{"class":518,"line":1983},29,[223,1985,1756],{"class":1035},[223,1987,1988],{"class":522},"常用命令\n",[223,1990,1992,1995],{"class":518,"line":1991},30,[223,1993,1994],{"class":530},"```",[223,1996,1998],{"class":1997},"sJsPd","bash\n",[223,2000,2002,2005,2008],{"class":518,"line":2001},31,[223,2003,2004],{"class":522},"pnpm",[223,2006,2007],{"class":530}," dev",[223,2009,2010],{"class":543},"          # 启动开发服务器\n",[223,2012,2014,2016,2019],{"class":518,"line":2013},32,[223,2015,2004],{"class":522},[223,2017,2018],{"class":530}," test",[223,2020,2021],{"class":543},"         # 运行单元测试\n",[223,2023,2025,2027,2030],{"class":518,"line":2024},33,[223,2026,2004],{"class":522},[223,2028,2029],{"class":530}," test:e2e",[223,2031,2032],{"class":543},"     # 运行 E2E 测试\n",[223,2034,2036,2038,2041],{"class":518,"line":2035},34,[223,2037,2004],{"class":522},[223,2039,2040],{"class":530}," db:generate",[223,2042,2043],{"class":543},"  # 生成 Drizzle 迁移\n",[223,2045,2047,2049,2052],{"class":518,"line":2046},35,[223,2048,2004],{"class":522},[223,2050,2051],{"class":530}," db:migrate",[223,2053,2054],{"class":543},"   # 执行迁移\n",[205,2056,2057],{"id":2057},"注意事项",[394,2059,2060,2067,2070],{},[397,2061,2062,2063,2066],{},"所有 API 路由必须使用 ",[235,2064,2065],{},"\u002Fapi\u002Fv1"," 前缀",[397,2068,2069],{},"JWT token 24 小时过期，refresh token 7 天过期",[397,2071,2072],{},"不要在组件中直接调用数据库，必须通过 service 层",[228,2074,2077],{"className":2075,"code":2076,"language":233},[231],"\n**最佳实践 2：使用 `\u002Finit` 自动生成 CLAUDE.md**\n\nClaude Code 提供了 `\u002Finit` 命令，可以自动分析项目并生成初始的 `CLAUDE.md`[^7]：\n\n```bash\nclaude> \u002Finit\n",[235,2078,2076],{"__ignoreMap":237},[195,2080,2081],{},"Claude 会：",[748,2083,2084,2087,2090,2093],{},[397,2085,2086],{},"读取 package.json \u002F 等配置文件",[397,2088,2089],{},"扫描目录结构",[397,2091,2092],{},"识别技术栈和框架",[397,2094,2095],{},"生成包含项目概述、关键目录、常用命令的 CLAUDE.md",[195,2097,2098,226,2101,2104],{},[218,2099,2100],{},"注意",[235,2102,2103],{},"\u002Finit"," 生成的文件是一个起点，你需要根据实际项目情况补充团队约定、架构决策等它无法推断的内容。",[195,2106,2107],{},[218,2108,2109],{},"最佳实践 3：分层 CLAUDE.md",[195,2111,2112,2113,2115,226],{},"对于 monorepo 或大型项目，可以在不同层级放置 ",[235,2114,108],{},[223,2116,2117],{},"^8",[228,2119,2122],{"className":2120,"code":2121,"language":233},[231],"~\u002F.claude\u002FCLAUDE.md          # 全局：个人偏好、通用标准\n.\u002FCLAUDE.md                  # 项目根：架构、技术栈\n.\u002Fpackages\u002Fapi\u002FCLAUDE.md     # 子包：API 层的特定约定\n.\u002Fpackages\u002Fweb\u002FCLAUDE.md     # 子包：前端层的特定约定\n",[235,2123,2121],{"__ignoreMap":237},[195,2125,2126],{},"加载优先级：子目录 > 项目根 > 全局。这让 Claude 在工作的具体位置获得最相关的上下文。",[210,2128,2130],{"id":2129},"_52-如何提问从模糊到精确","5.2 如何提问：从模糊到精确",[195,2132,2133],{},"提问的质量直接决定了 Claude 的回答质量。以下是不同精确度的提问对比：",[195,2135,2136,226],{},[218,2137,2138],{},"模糊提问（低效）",[228,2140,2142],{"className":511,"code":2141,"language":513,"meta":237,"style":237},"claude> 这个项目有点问题，帮我看看\n# Claude 不知道从哪里开始，可能读取大量无关文件\n",[235,2143,2144,2153],{"__ignoreMap":237},[223,2145,2146,2148,2150],{"class":518,"line":519},[223,2147,523],{"class":522},[223,2149,527],{"class":526},[223,2151,2152],{"class":530},"这个项目有点问题，帮我看看\n",[223,2154,2155],{"class":518,"line":540},[223,2156,2157],{"class":543},"# Claude 不知道从哪里开始，可能读取大量无关文件\n",[195,2159,2160,226],{},[218,2161,2162],{},"中等精确度",[228,2164,2166],{"className":511,"code":2165,"language":513,"meta":237,"style":237},"claude> 登录功能有问题，帮我检查一下\n# Claude 会搜索 auth 相关文件，但仍需探索\n",[235,2167,2168,2177],{"__ignoreMap":237},[223,2169,2170,2172,2174],{"class":518,"line":519},[223,2171,523],{"class":522},[223,2173,527],{"class":526},[223,2175,2176],{"class":530},"登录功能有问题，帮我检查一下\n",[223,2178,2179],{"class":518,"line":540},[223,2180,2181],{"class":543},"# Claude 会搜索 auth 相关文件，但仍需探索\n",[195,2183,2184,226],{},[218,2185,2186],{},"精确提问（高效）",[228,2188,2190],{"className":511,"code":2189,"language":513,"meta":237,"style":237},"claude> 在 src\u002Fapp\u002Fapi\u002Fauth\u002Flogin\u002Froute.ts 中，POST 处理函数（约第 15 行）没有验证请求体。添加 Zod schema 验证，确保 email 是有效邮箱格式，password 至少 8 位。参考 src\u002Flib\u002Fvalidation\u002Fuser.ts 中的现有验证模式。\n# Claude 直接定位到具体文件，理解约束条件，参考现有模式\n",[235,2191,2192,2246],{"__ignoreMap":237},[223,2193,2194,2196,2198,2201,2204,2207,2210,2213,2216,2219,2222,2225,2228,2231,2234,2237,2240,2243],{"class":518,"line":519},[223,2195,523],{"class":522},[223,2197,527],{"class":526},[223,2199,2200],{"class":530},"在",[223,2202,2203],{"class":530}," src\u002Fapp\u002Fapi\u002Fauth\u002Flogin\u002Froute.ts",[223,2205,2206],{"class":530}," 中，POST",[223,2208,2209],{"class":530}," 处理函数（约第",[223,2211,2212],{"class":902}," 15",[223,2214,2215],{"class":530}," 行）没有验证请求体。添加",[223,2217,2218],{"class":530}," Zod",[223,2220,2221],{"class":530}," schema",[223,2223,2224],{"class":530}," 验证，确保",[223,2226,2227],{"class":530}," email",[223,2229,2230],{"class":530}," 是有效邮箱格式，password",[223,2232,2233],{"class":530}," 至少",[223,2235,2236],{"class":902}," 8",[223,2238,2239],{"class":530}," 位。参考",[223,2241,2242],{"class":530}," src\u002Flib\u002Fvalidation\u002Fuser.ts",[223,2244,2245],{"class":530}," 中的现有验证模式。\n",[223,2247,2248],{"class":518,"line":540},[223,2249,2250],{"class":543},"# Claude 直接定位到具体文件，理解约束条件，参考现有模式\n",[195,2252,2253,226],{},[218,2254,2255],{},"高效提问的公式",[228,2257,2260],{"className":2258,"code":2259,"language":233},[231],"[具体位置] + [当前行为] + [期望行为] + [约束\u002F参考]\n",[235,2261,2259],{"__ignoreMap":237},[210,2263,2265],{"id":2264},"_53-探索-计划-编码框架","5.3 \"探索-计划-编码\"框架",[195,2267,2268,2269,226],{},"对于复杂任务，采用分阶段的方法可以显著提高成功率",[223,2270,2271],{},"^9",[195,2273,2274],{},[218,2275,2276],{},"阶段 1：探索（Explore）",[228,2278,2280],{"className":511,"code":2279,"language":513,"meta":237,"style":237},"claude> 我需要给通知系统添加 Slack 渠道支持。先不要写代码，先探索 \u002Fsrc\u002Fnotifications\u002F 目录，了解：1) 文件结构 2) 渠道基类接口 3) 现有渠道（Email、SMS）是如何注册的。只读模式，不要修改任何文件。\n",[235,2281,2282],{"__ignoreMap":237},[223,2283,2284,2286,2288,2291,2294,2297,2300,2303],{"class":518,"line":519},[223,2285,523],{"class":522},[223,2287,527],{"class":526},[223,2289,2290],{"class":530},"我需要给通知系统添加",[223,2292,2293],{"class":530}," Slack",[223,2295,2296],{"class":530}," 渠道支持。先不要写代码，先探索",[223,2298,2299],{"class":530}," \u002Fsrc\u002Fnotifications\u002F",[223,2301,2302],{"class":530}," 目录，了解：1",[223,2304,2305],{"class":526},") 文件结构 2) 渠道基类接口 3) 现有渠道（Email、SMS）是如何注册的。只读模式，不要修改任何文件。\n",[195,2307,2308],{},[218,2309,2310],{},"阶段 2：计划（Plan）",[228,2312,2314],{"className":511,"code":2313,"language":513,"meta":237,"style":237},"claude> 基于刚才的探索，制定一个详细的实施计划。需要：1) 创建哪些文件 2) 修改哪些文件 3) 遵循什么模式 4) 测试策略是什么。列出每一步的具体操作。\n",[235,2315,2316],{"__ignoreMap":237},[223,2317,2318,2320,2322,2325],{"class":518,"line":519},[223,2319,523],{"class":522},[223,2321,527],{"class":526},[223,2323,2324],{"class":530},"基于刚才的探索，制定一个详细的实施计划。需要：1",[223,2326,2327],{"class":526},") 创建哪些文件 2) 修改哪些文件 3) 遵循什么模式 4) 测试策略是什么。列出每一步的具体操作。\n",[195,2329,2330],{},[218,2331,2332],{},"阶段 3：编码（Code）",[228,2334,2336],{"className":511,"code":2335,"language":513,"meta":237,"style":237},"claude> 按照计划实施。先创建 SlackChannel 类，然后注册到通知路由器，最后写测试。每完成一步告诉我结果。\n",[235,2337,2338],{"__ignoreMap":237},[223,2339,2340,2342,2344,2347,2350],{"class":518,"line":519},[223,2341,523],{"class":522},[223,2343,527],{"class":526},[223,2345,2346],{"class":530},"按照计划实施。先创建",[223,2348,2349],{"class":530}," SlackChannel",[223,2351,2352],{"class":530}," 类，然后注册到通知路由器，最后写测试。每完成一步告诉我结果。\n",[195,2354,2355,2356,2359],{},"这个框架的核心思想是：",[218,2357,2358],{},"先理解，再计划，最后执行","。它避免了 Claude 在不了解上下文的情况下盲目修改代码。",[202,2361],{},[205,2363,2365],{"id":2364},"六常见提问模板与预期响应","六、常见提问模板与预期响应",[210,2367,2369],{"id":2368},"模板-1这个项目做什么","模板 1：\"这个项目做什么？\"",[228,2371,2373],{"className":511,"code":2372,"language":513,"meta":237,"style":237},"claude> 用一段话概括这个项目是做什么的。它的核心功能是什么？目标用户是谁？\n",[235,2374,2375],{"__ignoreMap":237},[223,2376,2377,2379,2381],{"class":518,"line":519},[223,2378,523],{"class":522},[223,2380,527],{"class":526},[223,2382,2383],{"class":530},"用一段话概括这个项目是做什么的。它的核心功能是什么？目标用户是谁？\n",[195,2385,2386,226],{},[218,2387,812],{},[228,2389,2392],{"className":2390,"code":2391,"language":233},[231],"这是一个开源的在线协作白板应用，核心功能包括：\n\n1. 实时多人协作：基于 WebSocket 的同步编辑\n2. 丰富的绘图工具：便签、连线、图形、手绘\n3. 导出功能：支持 PNG、SVG、PDF 导出\n4. 自托管支持：提供 Docker 部署方案\n\n目标用户是需要远程协作进行头脑风暴、流程图绘制、UI 原型设计的团队。\n\n技术亮点：\n- 使用 CRDT 算法处理并发编辑冲突\n- Canvas 渲染引擎支持万级元素流畅操作\n- 端到端加密选项保护敏感内容\n",[235,2393,2391],{"__ignoreMap":237},[210,2395,2397],{"id":2396},"模板-2技术栈是什么","模板 2：\"技术栈是什么？\"",[228,2399,2401],{"className":511,"code":2400,"language":513,"meta":237,"style":237},"claude> 详细分析这个项目的技术栈。包括：前端、后端、数据库、基础设施、开发工具。对每个主要技术选择，说明它的作用。\n",[235,2402,2403],{"__ignoreMap":237},[223,2404,2405,2407,2409],{"class":518,"line":519},[223,2406,523],{"class":522},[223,2408,527],{"class":526},[223,2410,2411],{"class":530},"详细分析这个项目的技术栈。包括：前端、后端、数据库、基础设施、开发工具。对每个主要技术选择，说明它的作用。\n",[210,2413,2415],{"id":2414},"模板-3目录结构解释","模板 3：\"目录结构解释\"",[228,2417,2419],{"className":511,"code":2418,"language":513,"meta":237,"style":237},"claude> 用树状图展示项目的目录结构（只显示到 2 级深度），然后解释每个主要目录的设计意图和包含的内容类型。\n",[235,2420,2421],{"__ignoreMap":237},[223,2422,2423,2425,2427,2430,2433],{"class":518,"line":519},[223,2424,523],{"class":522},[223,2426,527],{"class":526},[223,2428,2429],{"class":530},"用树状图展示项目的目录结构（只显示到",[223,2431,2432],{"class":902}," 2",[223,2434,2435],{"class":530}," 级深度），然后解释每个主要目录的设计意图和包含的内容类型。\n",[210,2437,2439],{"id":2438},"模板-4找到-x-功能的实现","模板 4：\"找到 X 功能的实现\"",[228,2441,2443],{"className":511,"code":2442,"language":513,"meta":237,"style":237},"claude> 找到用户密码重置功能的完整实现。包括：1) 触发重置的 API 端点 2) 生成重置 token 的逻辑 3) 发送邮件的代码 4) 验证 token 并重置密码的逻辑 5) 对应的测试文件。列出每个文件的绝对路径和关键函数名。\n",[235,2444,2445],{"__ignoreMap":237},[223,2446,2447,2449,2451,2454],{"class":518,"line":519},[223,2448,523],{"class":522},[223,2450,527],{"class":526},[223,2452,2453],{"class":530},"找到用户密码重置功能的完整实现。包括：1",[223,2455,2456],{"class":526},") 触发重置的 API 端点 2) 生成重置 token 的逻辑 3) 发送邮件的代码 4) 验证 token 并重置密码的逻辑 5) 对应的测试文件。列出每个文件的绝对路径和关键函数名。\n",[210,2458,2460],{"id":2459},"模板-5这个函数类是做什么的","模板 5：\"这个函数\u002F类是做什么的？\"",[228,2462,2464],{"className":511,"code":2463,"language":513,"meta":237,"style":237},"claude> 解释 src\u002Fservices\u002Fpayment.ts 中的 `processRefund` 函数。包括：1) 输入参数和返回值 2) 核心逻辑步骤 3) 错误处理策略 4) 调用的外部服务 5) 可能的边界情况。\n",[235,2465,2466],{"__ignoreMap":237},[223,2467,2468,2470,2472,2475,2478,2481,2483,2486,2488,2491],{"class":518,"line":519},[223,2469,523],{"class":522},[223,2471,527],{"class":526},[223,2473,2474],{"class":530},"解释",[223,2476,2477],{"class":530}," src\u002Fservices\u002Fpayment.ts",[223,2479,2480],{"class":530}," 中的",[223,2482,1109],{"class":1035},[223,2484,2485],{"class":522},"processRefund",[223,2487,1115],{"class":1035},[223,2489,2490],{"class":522}," 函数。包括：1",[223,2492,2493],{"class":526},") 输入参数和返回值 2) 核心逻辑步骤 3) 错误处理策略 4) 调用的外部服务 5) 可能的边界情况。\n",[210,2495,2497],{"id":2496},"模板-6数据流调用链分析","模板 6：\"数据流\u002F调用链分析\"",[228,2499,2501],{"className":511,"code":2500,"language":513,"meta":237,"style":237},"claude> 追踪\"创建订单\"这个业务操作的完整调用链。从前端提交表单开始，到数据写入数据库结束。列出每个步骤涉及的文件、函数和数据转换。\n",[235,2502,2503],{"__ignoreMap":237},[223,2504,2505,2507,2509,2512,2514,2517,2519],{"class":518,"line":519},[223,2506,523],{"class":522},[223,2508,527],{"class":526},[223,2510,2511],{"class":530},"追踪",[223,2513,1042],{"class":1035},[223,2515,2516],{"class":530},"创建订单",[223,2518,1042],{"class":1035},[223,2520,2521],{"class":530},"这个业务操作的完整调用链。从前端提交表单开始，到数据写入数据库结束。列出每个步骤涉及的文件、函数和数据转换。\n",[210,2523,2525],{"id":2524},"模板-7找出所有使用-x-的地方","模板 7：\"找出所有使用 X 的地方\"",[228,2527,2529],{"className":511,"code":2528,"language":513,"meta":237,"style":237},"claude> 找出项目中所有使用 `useAuth` hook 的地方。对每个使用点，说明：1) 文件路径 2) 使用方式（读取了哪些返回值）3) 使用场景（在哪个组件中，做什么用）。\n",[235,2530,2531],{"__ignoreMap":237},[223,2532,2533,2535,2537,2540,2542,2545,2547,2550,2553],{"class":518,"line":519},[223,2534,523],{"class":522},[223,2536,527],{"class":526},[223,2538,2539],{"class":530},"找出项目中所有使用",[223,2541,1109],{"class":1035},[223,2543,2544],{"class":522},"useAuth",[223,2546,1115],{"class":1035},[223,2548,2549],{"class":522}," hook",[223,2551,2552],{"class":530}," 的地方。对每个使用点，说明：1",[223,2554,2555],{"class":526},") 文件路径 2) 使用方式（读取了哪些返回值）3) 使用场景（在哪个组件中，做什么用）。\n",[210,2557,2559],{"id":2558},"模板-8生成架构文档","模板 8：\"生成架构文档\"",[228,2561,2563],{"className":511,"code":2562,"language":513,"meta":237,"style":237},"claude> 基于代码库生成一份架构文档，包含：1) 系统架构图（用 Mermaid 语法）2) 核心模块说明 3) 数据模型关系 4) API 端点列表 5) 部署架构。保存为 docs\u002Farchitecture.md。\n",[235,2564,2565],{"__ignoreMap":237},[223,2566,2567,2569,2571,2574],{"class":518,"line":519},[223,2568,523],{"class":522},[223,2570,527],{"class":526},[223,2572,2573],{"class":530},"基于代码库生成一份架构文档，包含：1",[223,2575,2576],{"class":526},") 系统架构图（用 Mermaid 语法）2) 核心模块说明 3) 数据模型关系 4) API 端点列表 5) 部署架构。保存为 docs\u002Farchitecture.md。\n",[202,2578],{},[205,2580,2582],{"id":2581},"七大型代码库的处理策略","七、大型代码库的处理策略",[210,2584,2586],{"id":2585},"_71-大型代码库的挑战","7.1 大型代码库的挑战",[195,2588,2589,2590,226],{},"当代码库超过约 5 万行时，Claude Code 面临三个核心挑战",[223,2591,2592],{},"^10",[195,2594,2595],{},[218,2596,2597],{},"挑战 1：盲目编辑（The Blind Edit）",[195,2599,2600],{},"Claude 修改了一个文件，但没有看到它的调用者、测试或相关类型定义。修改在局部是正确的，但在全局是破坏性的。",[195,2602,2603],{},[218,2604,2605],{},"挑战 2：上下文抖动（Context Thrashing）",[195,2607,2608],{},"Claude 读取了十个文件来理解问题，消耗了 60% 的上下文窗口。当它开始写代码时，已经忘记了最早读取的文件细节。",[195,2610,2611],{},[218,2612,2613],{},"挑战 3：过度读取（The Over-read）",[195,2615,2616],{},"你让 Claude 修复一个模块的 bug，它却预先读取了整个目录树、所有相关测试、package.json、README 和三个配置文件。80% 的上下文被无关信息占据。",[210,2618,2620],{"id":2619},"_72-放大-缩小工作流","7.2 \"放大-缩小\"工作流",[195,2622,2623,2624,226],{},"这是处理大型代码库的核心工作流",[223,2625,2592],{},[195,2627,2628],{},[218,2629,2630],{},"缩小模式（Zoomed-out）：定向探索",[195,2632,2633],{},"在缩小模式下，Claude 只做一件事：建立对当前任务相关代码区域的心智模型。不编写任何代码。",[228,2635,2637],{"className":511,"code":2636,"language":513,"meta":237,"style":237},"claude> 我需要给通知系统添加 Slack 渠道。在写任何代码之前，先探索 \u002Fsrc\u002Fnotifications\u002F。告诉我：1) 文件结构 2) 渠道基类接口 3) 现有渠道（Email、SMS）是如何注册的。只读，不修改。\n",[235,2638,2639],{"__ignoreMap":237},[223,2640,2641,2643,2645,2647,2649,2652,2655],{"class":518,"line":519},[223,2642,523],{"class":522},[223,2644,527],{"class":526},[223,2646,2290],{"class":530},[223,2648,2293],{"class":530},[223,2650,2651],{"class":530}," 渠道。在写任何代码之前，先探索",[223,2653,2654],{"class":530}," \u002Fsrc\u002Fnotifications\u002F。告诉我：1",[223,2656,2657],{"class":526},") 文件结构 2) 渠道基类接口 3) 现有渠道（Email、SMS）是如何注册的。只读，不修改。\n",[195,2659,2660],{},[218,2661,2662],{},"放大模式（Zoomed-in）：精确执行",[195,2664,2665],{},"在放大模式下，Claude 基于缩小阶段建立的心智模型，精确地修改代码。",[228,2667,2669],{"className":511,"code":2668,"language":513,"meta":237,"style":237},"claude> 现在实现 Slack 通知渠道。严格按照 EmailChannel 在 \u002Fsrc\u002Fnotifications\u002Fchannels\u002Femail.ts 中的模式。在 \u002Fsrc\u002Fnotifications\u002Fchannels\u002Fslack.ts 创建新文件。使用 \u002Fsrc\u002Flib\u002Fslack.ts 中的 SlackWebhookClient 发送消息。\n",[235,2670,2671],{"__ignoreMap":237},[223,2672,2673,2675,2677,2680,2682,2685,2688,2691,2694,2697,2700,2703,2706,2708,2711],{"class":518,"line":519},[223,2674,523],{"class":522},[223,2676,527],{"class":526},[223,2678,2679],{"class":530},"现在实现",[223,2681,2293],{"class":530},[223,2683,2684],{"class":530}," 通知渠道。严格按照",[223,2686,2687],{"class":530}," EmailChannel",[223,2689,2690],{"class":530}," 在",[223,2692,2693],{"class":530}," \u002Fsrc\u002Fnotifications\u002Fchannels\u002Femail.ts",[223,2695,2696],{"class":530}," 中的模式。在",[223,2698,2699],{"class":530}," \u002Fsrc\u002Fnotifications\u002Fchannels\u002Fslack.ts",[223,2701,2702],{"class":530}," 创建新文件。使用",[223,2704,2705],{"class":530}," \u002Fsrc\u002Flib\u002Fslack.ts",[223,2707,2480],{"class":530},[223,2709,2710],{"class":530}," SlackWebhookClient",[223,2712,2713],{"class":530}," 发送消息。\n",[195,2715,2716,2719],{},[218,2717,2718],{},"振荡原则","：复杂任务需要多次放大-缩小循环。实现（放大）→ 运行测试（缩小看失败）→ 修复（放大）→ 检查集成（缩小）。这种振荡不是低效，而是可靠 AI 辅助开发的节奏。",[210,2721,2723],{"id":2722},"_73-外科手术式上下文加载","7.3 外科手术式上下文加载",[195,2725,2726,2727,2730,2732],{},"核心原则：",[218,2728,2729],{},"给 Claude 每个步骤所需的最小上下文，让它按需请求更多",[223,2731,2592],{},"。",[195,2734,2735,226],{},[218,2736,2737],{},"反模式（不要这样做）",[228,2739,2741],{"className":511,"code":2740,"language":513,"meta":237,"style":237},"claude> 先读取整个 src\u002F 目录了解项目结构，然后修复这个 bug\n# 消耗大量上下文在探索上\n",[235,2742,2743,2761],{"__ignoreMap":237},[223,2744,2745,2747,2749,2752,2755,2758],{"class":518,"line":519},[223,2746,523],{"class":522},[223,2748,527],{"class":526},[223,2750,2751],{"class":530},"先读取整个",[223,2753,2754],{"class":530}," src\u002F",[223,2756,2757],{"class":530}," 目录了解项目结构，然后修复这个",[223,2759,2760],{"class":530}," bug\n",[223,2762,2763],{"class":518,"line":540},[223,2764,2765],{"class":543},"# 消耗大量上下文在探索上\n",[195,2767,2768,226],{},[218,2769,2770],{},"正确做法",[228,2772,2774],{"className":511,"code":2773,"language":513,"meta":237,"style":237},"claude> 修复 src\u002Fauth.ts 中第 45 行的类型错误\n# 只读取一个文件，如果需要更多 Claude 会请求\n",[235,2775,2776,2796],{"__ignoreMap":237},[223,2777,2778,2780,2782,2785,2787,2790,2793],{"class":518,"line":519},[223,2779,523],{"class":522},[223,2781,527],{"class":526},[223,2783,2784],{"class":530},"修复",[223,2786,534],{"class":530},[223,2788,2789],{"class":530}," 中第",[223,2791,2792],{"class":902}," 45",[223,2794,2795],{"class":530}," 行的类型错误\n",[223,2797,2798],{"class":518,"line":540},[223,2799,2800],{"class":543},"# 只读取一个文件，如果需要更多 Claude 会请求\n",[195,2802,2803,226],{},[218,2804,2805],{},"上下文预算心智模型",[195,2807,2808],{},"把上下文窗口想象成一个预算。每次文件读取都是一笔支出。每次推理都是一笔支出。每行生成的代码都是一笔支出。你的工作是确保支出是高价值的——直接与任务相关。",[210,2810,2812],{"id":2811},"_74-monorepo-专项策略","7.4 Monorepo 专项策略",[195,2814,2815,2816,226],{},"Monorepo 将上下文管理的挑战放大了十倍",[223,2817,2592],{},[195,2819,2820],{},[218,2821,2822],{},"原则 1：包隔离",[195,2824,2825],{},"把每个包当作独立的代码库。从包根目录开始 Claude 的上下文，而不是 monorepo 根。",[228,2827,2829],{"className":511,"code":2828,"language":513,"meta":237,"style":237},"claude> 我们在 packages\u002Fapi 中工作。入口点是 packages\u002Fapi\u002Fsrc\u002Findex.ts。相关类型在 packages\u002Fshared\u002Fsrc\u002Ftypes\u002F 中，但只读取需要的类型文件，不要探索整个 shared 包。\n",[235,2830,2831],{"__ignoreMap":237},[223,2832,2833,2835,2837,2840,2843,2846,2849,2852,2855,2858],{"class":518,"line":519},[223,2834,523],{"class":522},[223,2836,527],{"class":526},[223,2838,2839],{"class":530},"我们在",[223,2841,2842],{"class":530}," packages\u002Fapi",[223,2844,2845],{"class":530}," 中工作。入口点是",[223,2847,2848],{"class":530}," packages\u002Fapi\u002Fsrc\u002Findex.ts。相关类型在",[223,2850,2851],{"class":530}," packages\u002Fshared\u002Fsrc\u002Ftypes\u002F",[223,2853,2854],{"class":530}," 中，但只读取需要的类型文件，不要探索整个",[223,2856,2857],{"class":530}," shared",[223,2859,2860],{"class":530}," 包。\n",[195,2862,2863],{},[218,2864,2865],{},"原则 2：顺序修改，不要并行",[195,2867,2868],{},"跨包修改时，一次改一个包。先改共享类型，验证通过。再更新消费者，再次验证。",[195,2870,2871],{},[218,2872,2873],{},"原则 3：维护依赖关系图",[195,2875,2876],{},"在根目录 CLAUDE.md 中维护一个简单的依赖关系图：",[228,2878,2880],{"className":1726,"code":2879,"language":1728,"meta":237,"style":237},"## 包依赖关系\n- `packages\u002Fapi` 依赖 `packages\u002Fshared` 和 `packages\u002Fdb`\n- `packages\u002Fweb` 依赖 `packages\u002Fshared` 和 `packages\u002Fui`\n- 无其他跨包依赖\n",[235,2881,2882,2889,2921,2949],{"__ignoreMap":237},[223,2883,2884,2886],{"class":518,"line":519},[223,2885,1756],{"class":1035},[223,2887,2888],{"class":522},"包依赖关系\n",[223,2890,2891,2893,2895,2898,2900,2903,2905,2908,2910,2913,2915,2918],{"class":518,"line":540},[223,2892,1784],{"class":1035},[223,2894,1109],{"class":1035},[223,2896,2897],{"class":530},"packages\u002Fapi",[223,2899,1115],{"class":1035},[223,2901,2902],{"class":526}," 依赖 ",[223,2904,1115],{"class":1035},[223,2906,2907],{"class":530},"packages\u002Fshared",[223,2909,1115],{"class":1035},[223,2911,2912],{"class":526}," 和 ",[223,2914,1115],{"class":1035},[223,2916,2917],{"class":530},"packages\u002Fdb",[223,2919,2920],{"class":1035},"`\n",[223,2922,2923,2925,2927,2930,2932,2934,2936,2938,2940,2942,2944,2947],{"class":518,"line":1746},[223,2924,1784],{"class":1035},[223,2926,1109],{"class":1035},[223,2928,2929],{"class":530},"packages\u002Fweb",[223,2931,1115],{"class":1035},[223,2933,2902],{"class":526},[223,2935,1115],{"class":1035},[223,2937,2907],{"class":530},[223,2939,1115],{"class":1035},[223,2941,2912],{"class":526},[223,2943,1115],{"class":1035},[223,2945,2946],{"class":530},"packages\u002Fui",[223,2948,2920],{"class":1035},[223,2950,2951,2953],{"class":518,"line":1753},[223,2952,1784],{"class":1035},[223,2954,2955],{"class":526}," 无其他跨包依赖\n",[210,2957,2959],{"id":2958},"_75-长会话管理策略","7.5 长会话管理策略",[195,2961,2962,2963,226],{},"当会话超过 30 轮时，上下文质量会显著下降。以下是管理长会话的策略",[223,2964,1590],{},[195,2966,2967],{},[218,2968,2969,2970],{},"策略 1：定期使用 ",[235,2971,1512],{},[195,2973,2974,2975,2977],{},"每 10-15 轮运行一次 ",[235,2976,1512],{},"，压缩对话历史。",[195,2979,2980],{},[218,2981,2982],{},"策略 2：检查点模式",[195,2984,2985],{},"每完成一个逻辑子任务，让 Claude 总结当前状态：",[228,2987,2989],{"className":511,"code":2988,"language":513,"meta":237,"style":237},"claude> 总结一下我们目前完成了什么、什么还在进行中、还有什么待做。保存到 \u002Ftmp\u002Fprogress.md。\n",[235,2990,2991],{"__ignoreMap":237},[223,2992,2993,2995,2997,3000],{"class":518,"line":519},[223,2994,523],{"class":522},[223,2996,527],{"class":526},[223,2998,2999],{"class":530},"总结一下我们目前完成了什么、什么还在进行中、还有什么待做。保存到",[223,3001,3002],{"class":530}," \u002Ftmp\u002Fprogress.md。\n",[195,3004,3005],{},[218,3006,3007],{},"策略 3：会话拆分",[195,3009,3010],{},"将大功能拆分为多个会话：",[394,3012,3013,3016,3019,3022],{},[397,3014,3015],{},"会话 1：数据层修改",[397,3017,3018],{},"会话 2：API 端点实现",[397,3020,3021],{},"会话 3：前端组件",[397,3023,3024],{},"会话 4：集成测试",[195,3026,3027],{},[218,3028,3029],{},"策略 4：新鲜重启",[195,3031,3032],{},"当会话已经深入调试死胡同、Claude 明显在\"挣扎\"时，最好的策略是开一个新会话，用一个简洁的简报重新开始：",[228,3034,3036],{"className":511,"code":3035,"language":513,"meta":237,"style":237},"# 新会话\nclaude> 问题：用户随机被登出。已尝试：1) 检查 token 过期逻辑（无果）2) 检查 cookie 设置（无果）。怀疑：session 刷新中间件有竞态条件。请检查 \u002Fsrc\u002Fmiddleware\u002Fsession-refresh.ts 找出根本原因。\n",[235,3037,3038,3043],{"__ignoreMap":237},[223,3039,3040],{"class":518,"line":519},[223,3041,3042],{"class":543},"# 新会话\n",[223,3044,3045,3047,3049,3052],{"class":518,"line":540},[223,3046,523],{"class":522},[223,3048,527],{"class":526},[223,3050,3051],{"class":530},"问题：用户随机被登出。已尝试：1",[223,3053,3054],{"class":526},") 检查 token 过期逻辑（无果）2) 检查 cookie 设置（无果）。怀疑：session 刷新中间件有竞态条件。请检查 \u002Fsrc\u002Fmiddleware\u002Fsession-refresh.ts 找出根本原因。\n",[210,3056,3058,3059,3062],{"id":3057},"_76-使用-claudeignore-排除无关文件","7.6 使用 ",[235,3060,3061],{},".claudeignore"," 排除无关文件",[195,3064,3065,3066,3068,3069,3071,3072,226],{},"类似于 ",[235,3067,350],{},"，你可以创建 ",[235,3070,3061],{}," 文件来告诉 Claude Code 忽略某些文件和目录",[223,3073,3074],{},"^11",[228,3076,3080],{"className":3077,"code":3078,"language":3079,"meta":237,"style":237},"language-gitignore shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# .claudeignore\nnode_modules\u002F\ndist\u002F\nbuild\u002F\n.coverage\u002F\n*.min.js\n*.min.css\npublic\u002Fassets\u002F\ntest\u002Ffixtures\u002F\n","gitignore",[235,3081,3082,3087,3092,3097,3102,3107,3112,3117,3122],{"__ignoreMap":237},[223,3083,3084],{"class":518,"line":519},[223,3085,3086],{},"# .claudeignore\n",[223,3088,3089],{"class":518,"line":540},[223,3090,3091],{},"node_modules\u002F\n",[223,3093,3094],{"class":518,"line":1746},[223,3095,3096],{},"dist\u002F\n",[223,3098,3099],{"class":518,"line":1753},[223,3100,3101],{},"build\u002F\n",[223,3103,3104],{"class":518,"line":1762},[223,3105,3106],{},".coverage\u002F\n",[223,3108,3109],{"class":518,"line":1768},[223,3110,3111],{},"*.min.js\n",[223,3113,3114],{"class":518,"line":1773},[223,3115,3116],{},"*.min.css\n",[223,3118,3119],{"class":518,"line":1781},[223,3120,3121],{},"public\u002Fassets\u002F\n",[223,3123,3124],{"class":518,"line":1797},[223,3125,3126],{},"test\u002Ffixtures\u002F\n",[195,3128,3129],{},"这可以防止 Claude 在探索时读取生成的文件、测试夹具、构建产物等无关内容。",[202,3131],{},[205,3133,3135],{"id":3134},"八实战案例从零理解一个陌生项目","八、实战案例：从零理解一个陌生项目",[195,3137,3138],{},"让我们通过一个完整的实战案例，展示如何使用本章介绍的技术快速理解一个陌生代码库。",[195,3140,3141,3144],{},[218,3142,3143],{},"场景","：你刚加入一个团队，需要快速理解一个电商平台的代码库。",[195,3146,3147],{},[218,3148,3149],{},"步骤 1：启动并初始化",[228,3151,3153],{"className":511,"code":3152,"language":513,"meta":237,"style":237},"cd ecommerce-platform\nclaude\n\n# 如果项目没有 CLAUDE.md，先运行 \u002Finit\nclaude> \u002Finit\n",[235,3154,3155,3164,3169,3173,3178],{"__ignoreMap":237},[223,3156,3157,3161],{"class":518,"line":519},[223,3158,3160],{"class":3159},"s2Zo4","cd",[223,3162,3163],{"class":530}," ecommerce-platform\n",[223,3165,3166],{"class":518,"line":540},[223,3167,3168],{"class":522},"claude\n",[223,3170,3171],{"class":518,"line":1746},[223,3172,1750],{"emptyLinePlaceholder":1749},[223,3174,3175],{"class":518,"line":1753},[223,3176,3177],{"class":543},"# 如果项目没有 CLAUDE.md，先运行 \u002Finit\n",[223,3179,3180,3182,3184],{"class":518,"line":1762},[223,3181,523],{"class":522},[223,3183,527],{"class":526},[223,3185,3186],{"class":530},"\u002Finit\n",[195,3188,3189],{},[218,3190,3191],{},"步骤 2：获取高层概览",[228,3193,3195],{"className":511,"code":3194,"language":513,"meta":237,"style":237},"claude> 分析这个项目的技术栈和架构。用 3 句话概括它是做什么的，然后列出主要技术选择和目录结构。\n",[235,3196,3197],{"__ignoreMap":237},[223,3198,3199,3201,3203,3206,3209],{"class":518,"line":519},[223,3200,523],{"class":522},[223,3202,527],{"class":526},[223,3204,3205],{"class":530},"分析这个项目的技术栈和架构。用",[223,3207,3208],{"class":902}," 3",[223,3210,3211],{"class":530}," 句话概括它是做什么的，然后列出主要技术选择和目录结构。\n",[195,3213,3214],{},[218,3215,3216],{},"步骤 3：理解核心领域",[228,3218,3220],{"className":511,"code":3219,"language":513,"meta":237,"style":237},"claude> 这个电商平台有哪些核心领域模块？（如商品、订单、用户、支付等）每个领域的主要文件在哪里？\n",[235,3221,3222],{"__ignoreMap":237},[223,3223,3224,3226,3228],{"class":518,"line":519},[223,3225,523],{"class":522},[223,3227,527],{"class":526},[223,3229,3230],{"class":530},"这个电商平台有哪些核心领域模块？（如商品、订单、用户、支付等）每个领域的主要文件在哪里？\n",[195,3232,3233],{},[218,3234,3235],{},"步骤 4：追踪一个完整业务流程",[228,3237,3239],{"className":511,"code":3238,"language":513,"meta":237,"style":237},"claude> 追踪\"用户下单\"的完整业务流程。从点击\"购买\"按钮开始，到订单创建成功结束。列出涉及的所有文件、API 端点、数据库表和外部服务调用。\n",[235,3240,3241],{"__ignoreMap":237},[223,3242,3243,3245,3247,3249,3251,3254,3256,3259,3261,3264,3266,3269],{"class":518,"line":519},[223,3244,523],{"class":522},[223,3246,527],{"class":526},[223,3248,2511],{"class":530},[223,3250,1042],{"class":1035},[223,3252,3253],{"class":530},"用户下单",[223,3255,1042],{"class":1035},[223,3257,3258],{"class":530},"的完整业务流程。从点击",[223,3260,1042],{"class":1035},[223,3262,3263],{"class":530},"购买",[223,3265,1042],{"class":1035},[223,3267,3268],{"class":530},"按钮开始，到订单创建成功结束。列出涉及的所有文件、API",[223,3270,3271],{"class":530}," 端点、数据库表和外部服务调用。\n",[195,3273,3274],{},[218,3275,3276],{},"步骤 5：理解数据模型",[228,3278,3280],{"className":511,"code":3279,"language":513,"meta":237,"style":237},"claude> 列出所有数据库表（或模型），并说明它们之间的关系。用 Mermaid ER 图语法表示。\n",[235,3281,3282],{"__ignoreMap":237},[223,3283,3284,3286,3288,3291,3294,3297],{"class":518,"line":519},[223,3285,523],{"class":522},[223,3287,527],{"class":526},[223,3289,3290],{"class":530},"列出所有数据库表（或模型），并说明它们之间的关系。用",[223,3292,3293],{"class":530}," Mermaid",[223,3295,3296],{"class":530}," ER",[223,3298,3299],{"class":530}," 图语法表示。\n",[195,3301,3302],{},[218,3303,3304],{},"步骤 6：识别关键约定和模式",[228,3306,3308],{"className":511,"code":3307,"language":513,"meta":237,"style":237},"claude> 这个项目使用了哪些设计模式？代码中有哪些反复出现的约定？（如错误处理、API 响应格式、认证检查等）\n",[235,3309,3310],{"__ignoreMap":237},[223,3311,3312,3314,3316,3319],{"class":518,"line":519},[223,3313,523],{"class":522},[223,3315,527],{"class":526},[223,3317,3318],{"class":530},"这个项目使用了哪些设计模式？代码中有哪些反复出现的约定？（如错误处理、API",[223,3320,3321],{"class":530}," 响应格式、认证检查等）\n",[195,3323,3324],{},[218,3325,3326],{},"步骤 7：生成个人速查文档",[228,3328,3330],{"className":511,"code":3329,"language":513,"meta":237,"style":237},"claude> 基于以上分析，生成一份我个人的 onboarding 速查文档，保存为 ONBOARDING.md。包含：1) 项目一句话描述 2) 技术栈 3) 关键文件速查表 4) 常见任务的操作指南 5) 需要注意的坑。\n",[235,3331,3332],{"__ignoreMap":237},[223,3333,3334,3336,3338,3341,3344,3347,3350],{"class":518,"line":519},[223,3335,523],{"class":522},[223,3337,527],{"class":526},[223,3339,3340],{"class":530},"基于以上分析，生成一份我个人的",[223,3342,3343],{"class":530}," onboarding",[223,3345,3346],{"class":530}," 速查文档，保存为",[223,3348,3349],{"class":530}," ONBOARDING.md。包含：1",[223,3351,3352],{"class":526},") 项目一句话描述 2) 技术栈 3) 关键文件速查表 4) 常见任务的操作指南 5) 需要注意的坑。\n",[195,3354,3355],{},"通过这 7 个步骤，你可以在 30 分钟内建立起对一个陌生中大型项目的系统性理解，而传统方式可能需要数天。",[202,3357],{},[205,3359,3361],{"id":3360},"九常见错误与避免方法","九、常见错误与避免方法",[282,3363,3364,3376],{},[285,3365,3366],{},[288,3367,3368,3371,3374],{},[291,3369,3370],{},"错误",[291,3372,3373],{},"后果",[291,3375,2770],{},[298,3377,3378,3389,3400,3414,3425,3436,3447],{},[288,3379,3380,3383,3386],{},[303,3381,3382],{},"一次性让 Claude \"理解整个代码库\"",[303,3384,3385],{},"上下文爆炸，什么都记不住",[303,3387,3388],{},"给 Claude 地图（CLAUDE.md），让它按需探索",[288,3390,3391,3394,3397],{},[303,3392,3393],{},"把完整文件粘贴到对话中",[303,3395,3396],{},"消耗大量上下文",[303,3398,3399],{},"引用文件路径，让 Claude 用工具读取",[288,3401,3402,3405,3408],{},[303,3403,3404],{},"会话过长不清理",[303,3406,3407],{},"上下文质量下降，回答变糟",[303,3409,3410,3411,3413],{},"定期 ",[235,3412,1512],{},"，任务完成后开新会话",[288,3415,3416,3419,3422],{},[303,3417,3418],{},"让 Claude 做搜索而非推理",[303,3420,3421],{},"浪费推理能力",[303,3423,3424],{},"用 grep\u002Ffd 做搜索，Claude 做分析和决策",[288,3426,3427,3430,3433],{},[303,3428,3429],{},"不提供约束条件",[303,3431,3432],{},"Claude 做出不符合项目约定的选择",[303,3434,3435],{},"在 CLAUDE.md 中记录约定，提问时明确约束",[288,3437,3438,3441,3444],{},[303,3439,3440],{},"忽略验证步骤",[303,3442,3443],{},"代码有 bug 未被发现",[303,3445,3446],{},"每次修改后要求运行测试和类型检查",[288,3448,3449,3452,3455],{},[303,3450,3451],{},"在 monorepo 中从根目录开始所有工作",[303,3453,3454],{},"上下文被无关包污染",[303,3456,3457],{},"从具体包的目录开始，明确指定工作范围",[202,3459],{},[205,3461,3463],{"id":3462},"十参考来源","十、参考来源",[195,3465,3466],{},"本文档内容综合整理自以下权威来源：",[748,3468,3469,3479,3487,3495,3503,3511,3519,3527,3535,3543,3551,3559,3567,3575,3583],{},[397,3470,3471,3478],{},[3472,3473,3477],"a",{"href":3474,"rel":3475},"https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fhow-claude-code-works",[3476],"nofollow","Claude Code 官方文档 - How Claude Code works"," — Agentic Loop、工具集和核心架构的官方说明",[397,3480,3481,3486],{},[3472,3482,3485],{"href":3483,"rel":3484},"https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fcontext-window",[3476],"Claude Code 官方文档 - Explore the context window"," — 上下文窗口的交互式模拟和机制说明",[397,3488,3489,3494],{},[3472,3490,3493],{"href":3491,"rel":3492},"https:\u002F\u002Fclaude.com\u002Fblog\u002Fusing-claude-md-files",[3476],"Claude Code 官方博客 - Using CLAUDE.md files"," — CLAUDE.md 的使用方法和最佳实践",[397,3496,3497,3502],{},[3472,3498,3501],{"href":3499,"rel":3500},"https:\u002F\u002Fnateross.dev\u002Fblog\u002Fclaude-code-tutorials\u002Fpart-3-understand-new-codebases",[3476],"Nate Ross - Claude Code Tutorials Part 3"," — 使用 Claude Code 理解新代码库的系统方法",[397,3504,3505,3510],{},[3472,3506,3509],{"href":3507,"rel":3508},"https:\u002F\u002Fwww.eesel.ai\u002Fblog\u002Fnavigate-codebase-claude-code",[3476],"eesel.ai - How to navigate any codebase with Claude Code"," — 代码库导航的核心技巧和高级工作流",[397,3512,3513,3518],{},[3472,3514,3517],{"href":3515,"rel":3516},"https:\u002F\u002Fkane.mx\u002Fposts\u002F2025\u002Fcontext-engineering-secrets-claude-code\u002F",[3476],"Kane.mx - Context Engineering Secrets for Claude Code"," — 上下文工程的四个关键模式",[397,3520,3521,3526],{},[3472,3522,3525],{"href":3523,"rel":3524},"https:\u002F\u002Fwww.osvaldorestrepo.dev\u002Fblog\u002Fclaude-code-context-limits",[3476],"Osvaldo Restrepo - Claude Code context limits"," — 上下文限制管理的实战经验",[397,3528,3529,3534],{},[3472,3530,3533],{"href":3531,"rel":3532},"https:\u002F\u002Ficeberglakehouse.com\u002Fposts\u002F2026-03-context-claude-code\u002F",[3476],"Iceberg Lakehouse - Context Management Strategies"," — 完整的上下文管理策略指南",[397,3536,3537,3542],{},[3472,3538,3541],{"href":3539,"rel":3540},"https:\u002F\u002Fralphable.com\u002Fblog\u002Fclaude-code-context-management-large-codebases-2026",[3476],"Ralphable - Navigate 100K+ Line Codebases"," — 大型代码库处理的实战系统",[397,3544,3545,3550],{},[3472,3546,3549],{"href":3547,"rel":3548},"https:\u002F\u002Fwww.hashbuilds.com\u002Farticles\u002Fclaude-code-context-management-handle-large-codebases-like-a-pro",[3476],"Hashbuilds - Handle Large Codebases"," — 大型项目的上下文管理策略",[397,3552,3553,3558],{},[3472,3554,3557],{"href":3555,"rel":3556},"https:\u002F\u002Fgist.github.com\u002Fjohnlindquist\u002Fd22c70fd70660b4f6fb4d0b05d0792d2",[3476],"John Lindquist - Claude Code Task Tool Deep Dive"," — Subagent 的深入技术解析",[397,3560,3561,3566],{},[3472,3562,3565],{"href":3563,"rel":3564},"https:\u002F\u002Fagiinprogress.substack.com\u002Fp\u002Fdissecting-claude-code-a-technical",[3476],"AGI In Progress - Dissecting Claude Code"," — Claude Code 的技术架构深度分析",[397,3568,3569,3574],{},[3472,3570,3573],{"href":3571,"rel":3572},"https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fagent-sdk\u002Fsubagents",[3476],"Claude Code 官方文档 - Subagents"," — 子代理的官方文档",[397,3576,3577,3582],{},[3472,3578,3581],{"href":3579,"rel":3580},"https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fcli-reference",[3476],"Claude Code 官方文档 - CLI reference"," — 命令行参考",[397,3584,3585,3590],{},[3472,3586,3589],{"href":3587,"rel":3588},"https:\u002F\u002Fwww.cometapi.com\u002Fmanaging-claude-codes-context\u002F",[3476],"CometAPI - Managing Claude Code's Context"," — 上下文管理的实用手册",[202,3592],{},[205,3594,3596],{"id":3595},"十一本章速查卡","十一、本章速查卡",[282,3598,3599,3609],{},[285,3600,3601],{},[288,3602,3603,3606],{},[291,3604,3605],{},"我想做...",[291,3607,3608],{},"命令\u002F操作",[298,3610,3611,3622,3632,3642,3652,3662,3672,3682,3691,3701,3712,3722,3733,3743],{},[288,3612,3613,3616],{},[303,3614,3615],{},"让 Claude 了解项目",[303,3617,3618,3619,3621],{},"先运行 ",[235,3620,2103],{}," 生成 CLAUDE.md，然后补充团队约定",[288,3623,3624,3627],{},[303,3625,3626],{},"分析技术栈",[303,3628,3629],{},[235,3630,3631],{},"分析这个项目的技术栈，列出主要框架和工具",[288,3633,3634,3637],{},[303,3635,3636],{},"解释目录结构",[303,3638,3639],{},[235,3640,3641],{},"解释这个项目的目录结构和设计模式",[288,3643,3644,3647],{},[303,3645,3646],{},"找到功能实现",[303,3648,3649],{},[235,3650,3651],{},"找到 [功能] 的完整实现，列出涉及的文件",[288,3653,3654,3657],{},[303,3655,3656],{},"追踪数据流",[303,3658,3659],{},[235,3660,3661],{},"追踪 [操作] 的完整调用链，从入口到数据库",[288,3663,3664,3667],{},[303,3665,3666],{},"理解单个函数",[303,3668,3669],{},[235,3670,3671],{},"解释 [文件] 中 [函数] 的功能、参数和返回值",[288,3673,3674,3677],{},[303,3675,3676],{},"并行探索多个模块",[303,3678,3679],{},[235,3680,3681],{},"使用 subagent 并行探索 [模块A] 和 [模块B]",[288,3683,3684,3687],{},[303,3685,3686],{},"查看上下文使用",[303,3688,3689],{},[235,3690,1542],{},[288,3692,3693,3696],{},[303,3694,3695],{},"压缩对话历史",[303,3697,3698],{},[235,3699,3700],{},"\u002Fcompact [保留重点]",[288,3702,3703,3706],{},[303,3704,3705],{},"排除无关文件",[303,3707,3708,3709,3711],{},"创建 ",[235,3710,3061],{}," 文件",[288,3713,3714,3717],{},[303,3715,3716],{},"探索但不修改",[303,3718,3719],{},[235,3720,3721],{},"先不要写代码，先探索...",[288,3723,3724,3727],{},[303,3725,3726],{},"切换任务时",[303,3728,3729,3732],{},[235,3730,3731],{},"\u002Fclear"," 或开新会话",[288,3734,3735,3738],{},[303,3736,3737],{},"引用文件",[303,3739,3740],{},[235,3741,3742],{},"@path\u002Fto\u002Ffile",[288,3744,3745,3748],{},[303,3746,3747],{},"精确修改",[303,3749,3750],{},[235,3751,3752],{},"[文件] + [当前行为] + [期望行为] + [约束]",[3754,3755,3756],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sJsPd, html code.shiki .sJsPd{--shiki-light:#90A4AE90;--shiki-default:#EEFFFF90;--shiki-dark:#BABED890}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}",{"title":237,"searchDepth":519,"depth":540,"links":3758},[3759,3765,3770,3776,3784,3787,3791,3801,3810,3811,3812,3813],{"id":207,"depth":540,"text":208,"children":3760},[3761,3762,3763,3764],{"id":212,"depth":1746,"text":213},{"id":265,"depth":1746,"text":266},{"id":492,"depth":1746,"text":493},{"id":655,"depth":1746,"text":656},{"id":777,"depth":540,"text":778,"children":3766},[3767,3768,3769],{"id":781,"depth":1746,"text":782},{"id":846,"depth":1746,"text":847},{"id":909,"depth":1746,"text":910},{"id":951,"depth":540,"text":952,"children":3771},[3772,3773,3774,3775],{"id":955,"depth":1746,"text":956},{"id":1083,"depth":1746,"text":1084},{"id":1151,"depth":1746,"text":1152},{"id":1217,"depth":1746,"text":1218},{"id":1366,"depth":540,"text":1367,"children":3777},[3778,3779,3780,3782],{"id":1370,"depth":1746,"text":1371},{"id":1461,"depth":1746,"text":1462},{"id":1538,"depth":1746,"text":3781},"4.3 使用 \u002Fcontext 查看当前上下文状态",{"id":1577,"depth":1746,"text":3783},"4.4 使用 \u002Fcompact 主动管理上下文",{"id":1698,"depth":540,"text":1699,"children":3785},[3786],{"id":1702,"depth":1746,"text":1703},{"id":2057,"depth":540,"text":2057,"children":3788},[3789,3790],{"id":2129,"depth":1746,"text":2130},{"id":2264,"depth":1746,"text":2265},{"id":2364,"depth":540,"text":2365,"children":3792},[3793,3794,3795,3796,3797,3798,3799,3800],{"id":2368,"depth":1746,"text":2369},{"id":2396,"depth":1746,"text":2397},{"id":2414,"depth":1746,"text":2415},{"id":2438,"depth":1746,"text":2439},{"id":2459,"depth":1746,"text":2460},{"id":2496,"depth":1746,"text":2497},{"id":2524,"depth":1746,"text":2525},{"id":2558,"depth":1746,"text":2559},{"id":2581,"depth":540,"text":2582,"children":3802},[3803,3804,3805,3806,3807,3808],{"id":2585,"depth":1746,"text":2586},{"id":2619,"depth":1746,"text":2620},{"id":2722,"depth":1746,"text":2723},{"id":2811,"depth":1746,"text":2812},{"id":2958,"depth":1746,"text":2959},{"id":3057,"depth":1746,"text":3809},"7.6 使用 .claudeignore 排除无关文件",{"id":3134,"depth":540,"text":3135},{"id":3360,"depth":540,"text":3361},{"id":3462,"depth":540,"text":3463},{"id":3595,"depth":540,"text":3596},"代码库扫描与结构分析","md",null,{"date":3818},"2026-04-26",{"title":68,"description":3814},"-TZXQ1-zNkJDJvgNhL4wNeKk49cQGSVOClmTiSOmu-w",[3822,3824],{"title":64,"path":65,"stem":66,"description":3823,"children":-1},"Claude Code 的交互体验是其区别于传统 IDE 插件的核心竞争力。它不是一个需要点击按钮的图形界面工具，而是一个深度融入终端工作流的命令行伴侣。理解它的启动流程、交互模式和内置命令体系，是高效使用 Claude Code 的第一步。",{"title":72,"path":73,"stem":74,"description":3825,"children":-1},"体验修改前请求许可的安全机制",1777395309641]