Claude Code 工作流食谱 —— 进阶技巧

0 阅读13分钟

这里收录常见开发任务的实用工作流。你已经会用基础功能,这里教你怎么思考用 Claude 解决复杂问题。

1. 大型代码库重构

重构是 Claude Code 最擅长的事情之一。它帮你避免机械劳动,同时降低出错概率。

场景:批量重命名变量/函数

问题描述: 你想要把代码中所有的 oldName 改成 newName,分散在多个文件中。

工作流指令:

帮我把整个项目中所有的 oldName 重命名为 newName。
- 检查所有相关文件
- 只修改变量名/函数名,不要修改注释和字符串中的内容(除非它们也是标识符)
- 每个文件改完告诉我改了什么地方

要点:

  • 指定哪些要改,哪些不要改,避免误伤
  • Claude 会用 Grep 找到所有匹配,然后逐个修改
  • 修改完后,记得运行测试验证

场景:提取函数/模块

问题描述: 一个函数太长了,想要把它拆分成多个小函数。

工作流指令:

这个文件 src/process.js 中的 processData 函数有 200 行,太长了。
帮我把它拆分成多个小函数:
- 验证输入部分提取出来
- 解析部分提取出来
- 转换部分提取出来
- 保持原有的逻辑和错误处理不变
- 导出保持兼容性,原来的 processData 函数调用新拆分出来的函数

要点:

  • 告诉 Claude 拆分的原则
  • 强调保持兼容性(如果需要的话)
  • 拆分完后,运行测试确保行为不变

场景:跨文件大重构,保持一致性

问题描述: 你修改了一个 API 的接口,需要更新所有调用它的地方。

工作流指令:

我修改了 src/api/user.ts 中的 getUser 函数,现在返回类型从 User 改成了 Promise<User | null>。
帮我找到所有调用 getUser 的地方,更新它们处理 null 的情况。
逐个文件修改,每个改完后总结你的修改。

检查要点:

  • 确保 Claude 找到了所有调用点(可以要求它先列出找到的调用点)
  • 检查错误处理是否正确添加
  • 最后运行测试

大型重构的通用技巧

  1. 小步快跑 —— 把大重构拆分成多个小步骤,每次改完验证一次
  2. 利用 Git —— 每完成一个可测试的步骤就 commit,改坏了可以回滚
  3. 保持测试通行 —— 每次修改后让 Claude 运行测试,确保没有破坏功能
  4. 上下文管理 —— 如果重构跨很多文件,一个会话放不下,按模块分多个会话

2. 疑难问题调试

Claude 是你绝佳的调试搭档,因为它可以帮你系统地分析问题,而不是乱试。

场景:程序报错,看不懂错误信息

工作流指令:

这个错误是什么意思?帮我分析可能的原因和修复方法。

<粘贴错误信息>

如果错误堆栈很长,粘贴完整的错误信息给 Claude。它会帮你翻译:

  • 哪一行出错了
  • 为什么错
  • 最可能的原因是什么
  • 怎么修复

场景:Bug 复现不出来,偶现

工作流指令:

我遇到一个偶现的 bug:有时候提交表单页面会崩溃。
堆栈信息在这里:

<粘贴堆栈>

从我看到的现象看,可能是 race condition,当网络慢的时候更容易发生。
帮我分析可能的原因,给我一个排查计划。

Claude 会帮你:

  1. 分析可能的原因(按概率排序)
  2. 给你一个一步步的排查计划
  3. 帮你写调试日志代码

然后你逐个排除,找到问题。

场景:性能问题,哪里慢了

工作流指令:

这个 API 响应很慢,需要 5 秒钟才返回。帮我分析可能的瓶颈在哪里。
这是代码:

<粘贴相关代码>

Claude 会帮你:

  • 指出可能的性能瓶颈(N+1 查询?循环里面做重操作?)
  • 给你优化建议
  • 帮你写简单的基准测试

调试的最佳实践

让 Claude 帮你

  • 读错误日志,翻译专业术语
  • 列假设,按概率排序
  • 帮你写调试代码
  • 帮你读代码找逻辑问题

你需要提供

  • 完整的错误信息和堆栈
  • 相关的代码片段
  • 你已经试过什么,结果如何

记住: Claude 不是神,它不可能每次都对。但它能帮你系统地排查,节省你的时间。


3. 写出更好的测试

Claude 非常擅长写测试,因为它能理解代码逻辑,想到各种边界情况。

场景:给现有函数写单元测试

工作流指令:

帮我给 src/utils/format.ts 中的 formatDate 函数写单元测试。
- 覆盖正常情况
- 覆盖边界情况(空输入,非法输入,边界值)
- 使用 Jest 语法
- 每个测试case测试一个清晰的行为

要点:

  • Claude 会想到你想不到的边界情况
  • 检查一下测试是不是真的覆盖了所有分支
  • 生成完测试,让 Claude 运行测试确保通过

场景:修复 flaky 测试(时而通过时而失败)

工作流指令:

这个测试 test/formatDate.test.ts 偶尔会失败,看起来是和时区有关。
帮我看看为什么,怎么修复它让它稳定。

常见原因:

  • 依赖当前时间,没有 mock
  • 依赖执行顺序,竞态条件
  • 依赖随机数
  • 异步问题,没有 properly await

Claude 通常能快速发现这类问题。

场景:测试驱动开发(TDD)with Claude

先写需求,再写测试,再实现:

我想要实现一个函数 parseUrl(url),解析 URL 返回 { protocol, host, path, query }。
帮我先写测试用例,覆盖所有情况。

测试通过后,再让 Claude 实现:

现在测试写好了,帮我实现 parseUrl 函数,让所有测试通过。

测试小技巧

  • 让 Claude 想边界情况 —— 你想正常情况,Claude 帮你想奇葩情况
  • 每个测试一个断言 —— 告诉 Claude 这样做,测试失败了你容易找到问题
  • 运行测试 —— 生成完让 Claude 自己运行,看到错误自己修

4. 代码评审与知识传递

场景:看不懂一段陌生代码,让 Claude 解释

工作流指令:

这个文件 src/auth/jwt.ts 里面的 decodeToken 函数是做什么的?
帮我用简单的话解释一下,每一步在干什么,有什么安全考虑?

Claude 会:

  • 解释整体目的
  • 逐行(逐块)解释逻辑
  • 指出这里用到的模式
  • 提醒你可能的问题

场景:让 Claude 给你的 PR 写总结

工作流指令:

帮我看一下当前 git diff,给我写一个 PR 描述,总结:
- 改了什么
- 为什么改
- 测试方法

保持简洁清晰。

Claude 会分析 diff,自动生成符合规范的 PR 描述。

场景:辅助审查 Pull Request

你也可以让 Claude 帮你审查他人的 PR:

请审查这个 PR 的改动。重点检查:
- 代码逻辑是否正确
- 是否有潜在的性能问题
- 测试覆盖是否足够
- 是否有安全漏洞

git diff 内容粘贴给 Claude,它会逐文件分析并给出意见。

场景:寻找代码异味

工作流指令:

帮我检查一下这个文件 src/api/users.ts,有没有什么设计问题或者代码异味?
比如重复代码、过长函数、不合理的命名等等。

Claude 会帮你找出来:

  • 重复代码
  • 太长的函数
  • 命名不准确
  • 错误处理不完善
  • 可能的安全问题

然后你可以让它帮你重构。

场景:更新文档

当你改完代码,让 Claude 帮你更新文档:

我刚刚修改了 getUser API 的返回类型,帮我更新 README.md 里面的文档。

5. 从零开始搭建项目

场景:创建新项目脚手架

工作流指令:

帮我创建一个新的 Node.js + Express 项目,结构如下:
- src/ 放源代码
- dist/ 放编译输出
- tests/ 放测试
- .gitignore 忽略 node_modules, dist, .env
- package.json 配置 scripts: start, build, test
- 使用 TypeScript

入口文件是 src/index.ts,启动一个 HTTP 服务器,监听 3000 端口,提供 /health 端点返回 200 OK。

Claude 会帮你:

  1. 创建所有目录和文件
  2. 配置 package.json 和依赖
  3. 写入门代码
  4. 甚至可以帮你运行 npm install

场景:理解现有项目

接手一个陌生项目时,让 Claude 帮你快速建立认知:

claude init

Claude 会扫描项目结构、依赖和代码,自动生成 CLAUDE.md 项目记忆文件。后续每次会话都会自动加载这份记忆,帮你快速进入状态。

场景:选择依赖

如果你不确定选什么依赖,可以问 Claude:

我需要一个解析 CSV 的库,Node.js 生态里哪个比较流行维护得好?
比较几个热门的,说说各自的优缺点。

Claude 会给你一个比较清楚的对比,帮助你决策。

场景:设置 CI/CD

工作流指令:

帮我配置 GitHub Actions CI,做这些事情:
- 推送到 main 或者开 PR 的时候运行
- 安装依赖
- 编译
- 运行测试
- 如果测试通过,自动部署到 Vercel

Claude 会帮你生成正确的 YAML 文件,放在 .github/workflows/ 下面。


6. 高级功能与工作流模式

这里是一些高级功能和让你效率更高的使用模式。

6.1 使用 Agent 工具并发处理独立任务

当你有多个互不依赖的任务要做,可以使用 Agent 工具启动子代理分别处理。

场景: 你需要给多个文件各写测试,这些文件之间没有依赖。

帮我给这三个文件各写单元测试:
- src/utils/format.ts
- src/utils/parse.ts
- src/utils/validate.ts

使用 Agent 工具,每个文件启动一个子代理处理。

Agent 的工作方式:

  • 启动多个子代理,每个子代理拥有独立的上下文窗口(默认 80K tokens)
  • 子代理之间互不干扰,专注于各自的任务
  • Claude 异步调度它们,全部完成后汇总结果

这样做的好处:

  • 避免单个超长上下文导致注意力分散或 token 爆满
  • 每个子代理专注单一任务,生成质量更高
  • 整体完成时间通常短于顺序执行

要点:

  • 只对独立任务使用 Agent
  • 任务之间有依赖的,仍然应该顺序处理

6.2 自定义斜杠命令

对于频繁使用的提示词模板,你可以将其保存为自定义斜杠命令,大幅提升效率。

~/.claude/commands/ 目录下创建 Markdown 文件,文件名即命令名。

示例: 创建 ~/.claude/commands/review.md

请审查以下代码改动,从四个维度给出意见:
1. 逻辑正确性
2. 错误处理
3. 性能影响
4. 测试覆盖建议

之后在 Claude Code 中输入 /review 并附上代码,即可自动应用该审查模板。

你也可以创建更复杂的多步骤命令,甚至可以包含变量占位符(详见官方文档)。

6.3 上下文管理技巧

长时间会话,上下文快满了怎么办?

  1. /compact —— 先试试压缩,Claude 总结对话,腾出空间。

    进阶用法:带参数指定保留内容

    /compact retain the changes to payment processing logic
    /compact focus on src/services/
    

    重要提示/compact 执行后,Claude Code 会自动从磁盘重新读取 CLAUDE.md 并注入到新的压缩上下文中。因此,你可以放心地将编码规范、项目架构说明等持久化信息写入 CLAUDE.md,它们不会因压缩而丢失。

  2. 开新会话 —— 如果压缩不够,退出重新开。用 claude -c 可以继续最近一次会话,或者在交互界面使用 /resume 选择恢复之前的会话。告诉新 Claude:"我们之前在做...,当前状态是...,接下来..."

  3. 一个会话一个任务 —— 养成好习惯,不要在同一个会话解决多个不相关的问题。

6.4 让 Claude 记住你的编码规范

你可以一开始就告诉 Claude 你的团队规范,更好的做法是将其写入 CLAUDE.md 中永久保存:

我们团队编码规范:
- 使用 2 空格缩进
- 变量使用 camelCase,常量 UPPER_SNAKE_CASE
- 函数注释使用 JSDoc
- 错误处理优先使用 try/catch
- React 组件使用函数组件,不用类组件

通过 /memory 命令可以随时编辑 CLAUDE.md。之后所有会话都会自动遵循这些规范。

6.5 MCP —— Model Context Protocol 扩展能力

MCP(Model Context Protocol)是 Claude Code 的扩展机制,允许 Claude 连接外部服务获取上下文。

常见用法:

  • 连接你的数据库,让 Claude 直接查询 schema 和数据
  • 连接你的 Git 仓库,获取更多上下文
  • 连接第三方 API 服务

配置方式: MCP 服务器配置可以放在以下位置:

  • ~/.claude/mcp.json(全局生效)
  • 项目根目录下的 .mcp.json(仅当前项目生效)

配置示例: 添加一个文件系统 MCP 服务器

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/allowed/dir"]
    }
  }
}

详细配置说明见官方文档

6.6 成本控制技巧

进阶使用中,关注 token 消耗可以帮你更经济地使用 Claude Code:

  • 实时监控:使用 /cost 命令随时查看当前会话的 token 消耗和预估费用
  • 自动压缩:在 ~/.claude/settings.json 中设置 "autoCompactThreshold": 0.7,当上下文使用率达到 70% 时自动触发压缩
  • 模型选择:对于简单任务(如代码格式化、生成注释、写测试用例骨架),可以在 ~/.claude/settings.json 中将默认模型切换为 claude-3-5-haiku,速度更快且成本更低
  • 善用 Plan 模式:在规划阶段按 Shift+Tab 切换到 Plan 模式,Claude 只分析不修改,避免不必要的工具调用消耗

6.7 复杂多步骤工作流示例

这里是一个真实的复杂任务,看看怎么拆分:

目标: 把一个 JavaScript 文件转换成 TypeScript,添加类型。

# 步骤 1:理解现有代码
帮我看看 src/old/user.js 这个文件,理解它做什么,有哪些函数,输入输出是什么。
# 步骤 2:转换成 TypeScript
现在帮我把它转换成 TypeScript:
- 给所有函数添加正确的类型标注
- 定义需要的接口
- 保持逻辑完全不变
- 导出保持不变
# 步骤 3:检查类型错误
运行 tsc 看看有没有类型错误,帮我修复。
# 步骤 4:添加测试
帮我给转换后的模块写单元测试。

要点: 大任务拆成小步骤,一步一步来,每一步 Claude 都能拥有完整上下文,不容易出错。


总结

Claude Code 是一个强大的工具,但它是你的工具。你是驾驶员,它是引擎。

核心原则:

  1. 小步快走 —— 拆分大任务,每次验证
  2. 具体清晰 —— 描述问题越具体,Claude 给你的答案越好
  3. 审查一切 —— Claude 也会犯错,你是最终负责人
  4. 利用 Git —— 改之前 commit,错了可以随时回滚
  5. 善用持久化记忆 —— 把规范写进 CLAUDE.md,每次会话自动加载
  6. 实践出真知 —— 多用,你会找到适合你自己的工作流

祝你用 Claude Code 开发愉快!