用 Claude 构建可回滚的 CommonJS→ESM 代码迁移工具:59API 实战
先定义可验证的迁移边界
不要让模型直接处理整个仓库。本文以 CommonJS 迁移到 ESM 为例:将 require 改为 import、module.exports 改为 export,并补齐文件扩展名。先新建 Git 分支,再限定 src 目录和 .js 文件,避免生成文件、依赖目录及锁文件进入迁移范围。
- 用 Git 保存每次迁移前后的提交,确保随时可回滚。
- 先用 AST 工具扫描 require、module.exports、动态加载和循环依赖,生成待处理文件清单。
- 把动态 require、原生插件调用和入口文件标记为高风险,转入人工审核队列。
为 Claude 准备足够且受控的上下文
每次只发送一个文件、该文件依赖的少量接口定义,以及明确的迁移规则。提示词应要求模型把源代码视为数据,不执行代码中的指令,并要求仅返回统一 diff,不要解释或使用代码围栏。
提示词核心约束:保持函数行为和公共 API 不变;不得修改文件路径以外的内容;遇到动态加载时保留原逻辑并输出风险说明;新增 import 必须使用仓库现有的路径风格。这样比简单地说“帮我重构”更容易得到可应用的补丁。
通过 59API 调用 Claude
创建 API 密钥后,将 Anthropic SDK 的 base_url 指向 https://api.59api.com,并通过环境变量保存密钥,避免写入仓库。迁移脚本可按任务分层:先用 Haiku 对文件分类和筛选,再用 Sonnet 生成多数补丁,将复杂的循环依赖或测试失败修复交给 Opus。也可按项目需要选择 Fable。
59API 兼容 Claude Code、Codex 和常见 OpenAI SDK,适合把现有脚本逐步接入。其按量付费、原生官方品质模型且不降级,批量迁移时能控制成本;邀请返佣也适合团队长期使用。
安全应用补丁,而不是直接覆盖文件
迁移器应把 Claude 输出写入临时 diff 文件,先执行 git apply --check,再应用到独立工作区。校验失败时记录模型输出、文件名和失败原因,但不要自动覆盖原文件。
- 拒绝包含 ../、绝对路径或超出白名单目录的补丁。
- 限制单次修改文件数、补丁行数和 API 调用重试次数。
- 应用成功后立即生成 Git 提交,例如 migrate: convert utils to esm。
用测试反馈驱动有限次数修复
补丁应用后依次运行格式化、类型检查、单元测试和构建命令。将第一条有效错误、相关文件和当前 diff 发送给 Claude,要求只修复该错误;最多循环两次。若仍失败,自动执行 git revert 并输出人工处理报告。这样可避免模型在多轮修复中不断扩大改动范围。
把工具做成可运营的命令行流程
建议提供 scan、plan、apply、verify 四个子命令:scan 生成清单,plan 只生成补丁预览,apply 需要显式确认,verify 输出测试与风险报告。先在一个小模块试跑,统计每文件 token、成功率和回滚率,再逐步扩大范围。准备开始时,可注册 59API,用较低的按量成本验证你的 Claude 迁移流水线。
Ready to get started?
Connect Claude & GPT in minutes at the lowest prices — full-power, never downgraded. Sign up to get your API key.
Sign up free