真实改动,很少只碰一个文件
基础课你做的都是「单个文件」的小任务。真实项目里,一个功能往往横跨多个文件:改个接口要动后端、前端、测试……这一节讲 Codex 怎么处理跨文件的复杂改动,以及你要怎么配合它。
file-lib 从一个空目录长成一个多文件工具库。它就是「一个功能横跨多个文件」的活教材:入口文件、功能模块、测试文件各司其职,每次加功能都要跨文件动它。今天我们先给 file-lib 增加第一个跨文件的「路径工具」模块,感受 Codex 跨文件改动的节奏。跨文件改动的执行方式
Codex 处理跨文件任务,大致是这样:
- 理解范围:先搞清楚涉及哪些文件、它们怎么关联
- 规划改动:决定先改哪个、后改哪个
- 逐步执行:一个文件一个文件地改
- 汇总验证:检查整体是否一致、能不能跑
它不像你想的「啪一下全改完」,而是有顺序、有范围地推进。举个例子,给 file-lib 加一个路径工具,Codex 大概是这么走的:
| 步骤 | Codex 在做什么 | 对应哪个文件 |
|---|---|---|
| 理解 | 看入口 index.js 怎么导出,模块之间怎么引用 |
index.js、lib/ |
| 规划 | 决定新建 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 的活稳稳落地。
lib/path.js + 在 index.js 导出 + 加测试),确认计划后放行,最后跑整体测试。②怎么判断做对了:计划里没有越界文件、lib/path.js 的函数能被入口正常调用、原有模块测试依然全绿。③卡住了怎么办:如果 Codex 计划里多出不该碰的文件,直接说「去掉 xxx,只保留清单里的三个文件」;如果整体测试挂了,让它先回退到上一个提交再重做,别在坏基线上叠加。常见坑:Codex 把「建议」当「动手」
很多新人跨文件翻车,不是 Codex 能力问题,是节奏问题:你让它「列一下计划」,它列完你随口说「嗯不错」,它就当成了授权,直接开始改文件。等你反应过来,它已经碰了一堆不该碰的。
避坑办法:把「出计划」和「动手」当成两个明确阶段,并且只用明确的授权词。要让它停下来,就说:
现在只出计划,不要改任何文件。
我明确说「做吧」之前,你一律不要动手。
用这句把「计划阶段」锁死,Codex 就不会自作主张。记住:跨文件改动的第一责任人是你,不是它。 节奏失控 = 范围失控 = 返工。
小结
- 真实改动多跨文件,Codex 会「有顺序、有范围」地推进
- 你的关键配合:一开始就划清范围(文件 + 禁区)
- 先让它出改动计划,确认再动手
- 收尾做整体验证,别只看单文件
- 用明确的授权词锁死「计划 → 动手」两个阶段
下一节,讲上下文窗口与文件选择。