🎯 学习目标
学完本期你将掌握:
- 用自然语言替代
grep/find 进行语义化代码搜索
- 理解 Claude Code 如何组合
Glob + Grep + Read 进行深度探索
- Plan Mode 在代码审计中的实战应用
📖 核心概念讲解
6.1 传统搜索 vs 语义化搜索
| 维度 |
传统方式 |
Claude Code |
| 搜索文件名 |
find . -name "*.tsx" |
Glob(**/*.tsx) |
| 搜索内容 |
grep -r "TODO" src/ |
Grep("TODO" in src/**) |
| 理解上下文 |
❌ 只返回行号 |
✅ 解释代码意图 |
| 跨文件关联 |
❌ 需手动串联 |
✅ 自动追踪调用链 |
| 架构理解 |
❌ 需人工抽象 |
✅ 生成架构图 |
6.2 三步探索法
Step 1: 鸟瞰 Step 2: 定位 Step 3: 深潜
┌────────────┐ ┌────────────┐ ┌────────────┐
│ "整体架构 │──────►│ "支付模块 │──────►│ "Stripe │
│ 是怎样的?" │ │ 在哪里?" │ │ 回调怎么 │
│ │ │ │ │ 处理的?" │
│ Tools: │ │ Tools: │ │ Tools: │
│ Glob + Read │ │ Grep + Glob │ │ Read (多文件)│
└────────────┘ └────────────┘ └────────────┘
💻 模拟 Claude TUI 交互
场景 1:鸟瞰 — 快速了解项目全貌
$ cd ~/company-monorepo
$ claude --permission-mode plan
╭─ 🔒 Plan Mode ──────────────────────────────────────╮
│ Safe exploration — no files will be modified │
╰──────────────────────────────────────────────────────╯
> 给我一个这个项目的完整架构概览
╭─ Claude ─────────────────────────────────────────────╮
│ │
│ 🔍 Tool: Glob (**/package.json) │
│ → Found 8 packages (monorepo) │
│ │
│ 🔍 Tool: Read (package.json) │
│ → Workspace root: Turborepo + pnpm │
│ │
│ 🔍 Tool: Glob (apps/**/src/index.*) │
│ → 3 applications found │
│ │
│ 🔍 Tool: Read (apps/web/package.json) │
│ 🔍 Tool: Read (apps/api/package.json) │
│ 🔍 Tool: Read (apps/admin/package.json) │
│ 🔍 Tool: Glob (packages/*) │
│ │
│ ## 🏗️ 项目架构 │
│ │
│ **类型**: Turborepo Monorepo (pnpm workspaces) │
│ │
│ **应用层 (apps/)** │
│ ├── `web/` → Next.js 14 前端 (App Router) │
│ ├── `api/` → Express + Prisma REST API │
│ └── `admin/` → Astro SSR 管理后台 │
│ │
│ **共享层 (packages/)** │
│ ├── `ui/` → React 组件库 (Radix + Tailwind) │
│ ├── `db/` → Prisma schema + 生成客户端 │
│ ├── `config/` → ESLint / TS 配置共享 │
│ └── `utils/` → 公用工具函数 │
│ │
│ **技术栈** │
│ • 前端: React 19 + Next.js 14 + Tailwind CSS │
│ • 后端: Express + Prisma + PostgreSQL │
│ • 构建: Turborepo + pnpm │
│ • 部署: Vercel (web) + Railway (api) │
│ │
╰──────────────────────────────────────────────────────╯
场景 2:定位 — 找到特定功能的入口
> 用户注册的逻辑在哪里?涉及哪些文件?
╭─ Claude ─────────────────────────────────────────────╮
│ │
│ 🔍 Tool: Grep ("register" across apps/api/src/**) │
│ → 7 matches in 4 files │
│ │
│ 🔍 Tool: Grep ("signup" across apps/web/src/**) │
│ → 5 matches in 3 files │
│ │
│ 🔍 Tool: Read (apps/api/src/routes/auth.ts) │
│ 🔍 Tool: Read (apps/api/src/services/user.ts) │
│ 🔍 Tool: Read (apps/web/src/app/signup/page.tsx) │
│ │
│ ## 用户注册调用链 │
│ │
│ ``` │
│ 前端 后端 │
│ ───── ───── │
│ signup/page.tsx │
│ └── useSignup() hook │
│ └── POST /api/auth/register │
│ └── routes/auth.ts:L45 │
│ └── UserService.create() │
│ ├── 密码 bcrypt 加密 │
│ ├── Prisma user.create() │
│ ├── 发送验证邮件 │
│ └── 返回 JWT token │
│ ``` │
│ │
│ **关键文件清单**: │
│ 1. `apps/web/src/app/signup/page.tsx` — 注册表单 │
│ 2. `apps/web/src/hooks/useSignup.ts` — 前端 Hook │
│ 3. `apps/api/src/routes/auth.ts:L45` — 路由处理 │
│ 4. `apps/api/src/services/user.ts` — 业务逻辑 │
│ 5. `packages/db/prisma/schema.prisma` — User 模型 │
│ │
╰──────────────────────────────────────────────────────╯
场景 3:深潜 — 追查具体实现细节
> 密码加密用的什么算法?salt rounds 是多少?
验证邮件是怎么发送的?
╭─ Claude ─────────────────────────────────────────────╮
│ │
│ 🔍 Tool: Grep ("bcrypt" across apps/api/**) │
│ 🔍 Tool: Read (apps/api/src/services/user.ts) │
│ 🔍 Tool: Grep ("sendEmail\|mailer\|smtp" │
│ across apps/api/**) │
│ 🔍 Tool: Read (apps/api/src/lib/email.ts) │
│ 🔍 Tool: Read (apps/api/.env.example) │
│ │
│ ## 密码加密 │
│ • 算法: **bcrypt** (via `bcryptjs` 包) │
│ • Salt rounds: **12** (定义在 user.ts:L8) │
│ • 代码: `await bcrypt.hash(password, 12)` │
│ │
│ ## 邮件发送 │
│ • 服务: **Resend** (非 SMTP,使用 API 调用) │
│ • 封装在: `apps/api/src/lib/email.ts` │
│ • 模板: 使用 React Email (`@react-email/components`)│
│ • 环境变量: `RESEND_API_KEY` (见 .env.example) │
│ │
│ ⚠️ 注意: salt rounds=12 对生产环境合适, │
│ 但单元测试中可能导致速度慢,建议测试环境降低到 4。 │
│ │
╰──────────────────────────────────────────────────────╯
💻 代码演示:探索的高效 Prompt
# 鸟瞰级别
claude -p "给我这个项目的架构概览,包括技术栈和目录结构"
claude -p "这个项目有哪些主要的数据模型?画出 ER 图的文字版"
# 定位级别
claude -p "哪个文件负责处理用户登录?"
claude -p "所有调用了 Stripe API 的文件有哪些?"
claude -p "找出所有标记了 TODO 或 FIXME 的地方"
# 深潜级别
claude -p "解释 src/middleware/rateLimit.ts 的限流算法"
claude -p "从 checkout 按钮被点击开始,追踪整个支付流程"
# 代码审计
claude -p "检查 src/api/ 下是否有 SQL 注入风险"
claude -p "审查认证模块的安全性,列出所有潜在漏洞"
🔧 涉及的 Tools
| 工具 |
探索阶段 |
典型用法 |
Glob |
鸟瞰 |
Glob(**/*.ts) 发现项目结构 |
Read |
深潜 |
Read(package.json) 读取具体文件 |
Grep |
定位 |
Grep("stripe" in src/**) 全文搜索 |
Bash |
辅助 |
Bash(wc -l src/**/*.ts) 统计代码量 |
WebFetch |
外部参考 |
抓取第三方库文档辅助分析 |
📝 本期要点回顾
- 用自然语言探索代码库比
grep 更高效,因为 Claude 能 理解语义
- 遵循 鸟瞰 → 定位 → 深潜 的三层探索法
- Plan Mode 适合陌生代码库的安全探索(零风险)
- Claude 会自动组合多个搜索工具,追踪跨文件的调用链
- Print Mode (
-p) 可以快速输出分析结果到终端
🔗 参考资料