第 01 模块 · 1 节

跨文件改动的执行机制

《Codex 进阶实战》01 多文件与复杂任务 · 本节时长 28 分钟

真实改动,很少只碰一个文件

基础课你做的都是「单个文件」的小任务。真实项目里,一个功能往往横跨多个文件:改个接口要动后端、前端、测试……这一节讲 Codex 怎么处理跨文件的复杂改动,以及你要怎么配合它。

贯穿项目从这一节开始,你会和我一起把贯穿项目 file-lib 从一个空目录长成一个多文件工具库。它就是「一个功能横跨多个文件」的活教材:入口文件、功能模块、测试文件各司其职,每次加功能都要跨文件动它。今天我们先给 file-lib 增加第一个跨文件的「路径工具」模块,感受 Codex 跨文件改动的节奏。

跨文件改动的执行方式

Codex 处理跨文件任务,大致是这样:

  1. 理解范围:先搞清楚涉及哪些文件、它们怎么关联
  2. 规划改动:决定先改哪个、后改哪个
  3. 逐步执行:一个文件一个文件地改
  4. 汇总验证:检查整体是否一致、能不能跑

它不像你想的「啪一下全改完」,而是有顺序、有范围地推进。举个例子,给 file-lib 加一个路径工具,Codex 大概是这么走的:

步骤 Codex 在做什么 对应哪个文件
理解 看入口 index.js 怎么导出,模块之间怎么引用 index.jslib/
规划 决定新建 lib/path.js,再在 index.js 里导出它 lib/path.js(新建)、index.js
执行 写模块 → 写测试 → 更新导出 多个文件
验证 跑测试,确认入口能 require 到新模块 test/package.json

看懂这个节奏,你就知道为什么跨文件改动不能「一把梭」了——它天然是分文件的、有依赖顺序的。


你最重要的配合:说清「范围」

跨文件最容易翻车的是范围失控——它改了你不该让它碰的文件。你要做的是一开始就划定边界

【范围】只改 src/api/ 下的 login.js 和 register.js
【约束】不要动数据库、不要动前端、不要动其他接口

给 Codex 明确的文件清单和禁区,它就不会乱跑。划范围有个小技巧:列表格比写散文管用。直接给它「允许碰 / 绝对别碰」两栏:

这次改动允许碰的文件:
- lib/path.js(新建)
- index.js(加一行导出)
- test/path.test.js(新建)
绝对别碰:
- lib/string.js
- package.json 的 dependencies

表格把边界画得明明白白,Codex 一眼就能照做,你也不用反复纠正。


先让它出「改动计划」

跨文件改动前,先让 Codex 列出它打算改哪些文件、怎么改,你确认了再让它动手:

先别改。列出你要改哪些文件、每个文件改什么、顺序是什么。
我确认后你再动。

这一步能提前发现「它是不是又要碰不该碰的文件」。看到计划后,你要重点核对三件事:

  • 文件清单对不对:有没有多出不该碰的、漏掉必须碰的?
  • 顺序合不合理:有没有「被依赖的还没建,就先去改依赖它的」?
  • 范围守没守住:计划的禁区有没有越界?

这三点核对完再放行,等于把「跨文件翻车」挡在了动手之前。


跨文件改动的风险点

风险 后果 对策
范围失控 改了不该改的 划清边界
遗漏关联 改了一处忘了另一处 让它梳理关联
破坏一致性 接口改了调用方没跟上 整体验证
顺序颠倒 依赖的还没建就改依赖它的 先出计划、排依赖
只看单文件 单个对了整体坏了 跑整体测试

「整体验证」是跨文件改动的收尾关键——别只看单个文件,要跑起来看整体。单个文件测试全绿、但入口 require 不到新模块,一样是失败。跨文件的「成功」只有一个标准:整条链路跑通


一个完整示例

下面是把「路径工具」加进 file-lib 的完整对话,你可以照着走一遍:

你:给 file-lib 加一个路径工具模块。
   范围:新建 lib/path.js,在 index.js 里导出,加测试。
   别动其他模块和 package.json 依赖。
Codex:(先列计划)新建 lib/path.js;index.js 加一行导出;
   新建 test/path.test.js。顺序:模块 → 测试 → 导出。
你:可以,做吧。
Codex:已建好 lib/path.js,导出 join 和 basename;index.js 已导出;
   测试 3 条全过。
你:跑一下整体测试,确认入口能 require 到新模块、没破坏其他模块。

全程有范围、有计划、有整体验证,Codex 的活稳稳落地。

练习给 file-lib 加「路径工具」模块。①三步走:先让它出改动计划(新建 lib/path.js + 在 index.js 导出 + 加测试),确认计划后放行,最后跑整体测试。②怎么判断做对了:计划里没有越界文件、lib/path.js 的函数能被入口正常调用、原有模块测试依然全绿。③卡住了怎么办:如果 Codex 计划里多出不该碰的文件,直接说「去掉 xxx,只保留清单里的三个文件」;如果整体测试挂了,让它先回退到上一个提交再重做,别在坏基线上叠加。

常见坑:Codex 把「建议」当「动手」

很多新人跨文件翻车,不是 Codex 能力问题,是节奏问题:你让它「列一下计划」,它列完你随口说「嗯不错」,它就当成了授权,直接开始改文件。等你反应过来,它已经碰了一堆不该碰的。

避坑办法:把「出计划」和「动手」当成两个明确阶段,并且只用明确的授权词。要让它停下来,就说:

现在只出计划,不要改任何文件。
我明确说「做吧」之前,你一律不要动手。

用这句把「计划阶段」锁死,Codex 就不会自作主张。记住:跨文件改动的第一责任人是你,不是它。 节奏失控 = 范围失控 = 返工。


小结

  1. 真实改动多跨文件,Codex 会「有顺序、有范围」地推进
  2. 你的关键配合:一开始就划清范围(文件 + 禁区)
  3. 先让它出改动计划,确认再动手
  4. 收尾做整体验证,别只看单文件
  5. 用明确的授权词锁死「计划 → 动手」两个阶段

下一节,讲上下文窗口与文件选择。