AI多Agent协作系统实战(三十六):代码里明明写了,编译完怎么没了?

📅 2026/8/23 9:06:58
AI多Agent协作系统实战(三十六):代码里明明写了,编译完怎么没了?
头像加载失败排查半天源码里明明白白写着域名拼接的逻辑编译出来的产物里——这行代码消失了。不是bug不是网络是编译器悄悄把我的代码优化掉了。现象头像一片空白移动端App更新后登录进去——右上角头像空白。正常来说头像应该显示用户上传的照片。查网络、查接口、查权限……都没问题接口正常返回头像路径/uploads/avatar/1_1785567950217.png图片文件存在直接访问200但页面上就是不显示打开浏览器控制台看到一个404GET http://192.168.3.150:8080/mobile/uploads/avatar/1_1785567950217.png → 404注意看路径——多了一个/mobile。正确的路径应该是http://192.168.3.150:8080/uploads/avatar/...根路径但它被解析成了/mobile/uploads/...移动端目录下。排查源码里明明有拼接逻辑页面在/mobile/目录下头像用的是相对路径/uploads/avatar/...——相对路径在子目录页面下会被错误解析。解决办法是在路径前拼上域名origin。打开源码发现这个逻辑明明写了// 源码login/index.vueconstavatarUrlcomputed((){if(!userInfo.avatar)returnif(userInfo.avatar.startsWith(http))returnuserInfo.avatarreturnwindow.location.originuserInfo.avatar// ← 拼接域名明明在这})window.location.origin——把域名拼到相对路径前面得到完整的http://192.168.3.150:8080/uploads/avatar/xxx.png。逻辑是对的代码是有的。那为什么页面还是404根因编译器把代码优化没了打开编译后的产物Vite打包生成的JS文件搜索这段逻辑// 产物编译后的 chunkNcomputed((){returnuserInfo.avatar||// ← 拼接逻辑呢没了})window.location.origin 这一段在编译产物里消失了。源码里明明有编译完只剩userInfo.avatar直接返回。这是构建工具Vite 5.12的产物生成缺陷——某个构建环节把这段拼接逻辑丢掉了类似的问题还有组件事件绑定丢失、输入框属性错乱、文字组件渲染异常——同一批构建事故。源码是完整的产物是残缺的。我们一直在查代码有没有写错——其实代码没错是编译过程把对的代码弄丢了。修复改产物 修源码双保险第一步直接修复当前产物生产环境跑的是产物等不了重新构建// 产物修复把拼接逻辑补回去Ncomputed((){constauserInfo.avatar||returna!/^https?:/.test(a)?window.location.origina:a})第二步源码也要加固——但更重要的是以后每次构建完必须验证产物和源码一致关键逻辑在产物里 grep 验证。三条教训第一源码 ≠ 运行代码。用户跑的是编译产物不是你的源码。我代码里写了不是结论——产物里也有才是。排查问题永远从产物入手不要从源码入手——源码是愿望产物是现实。第二构建工具也会出错。我们默认编译器是可靠的——但遇到源码有逻辑、产物没有的灵异现象时要敢于怀疑构建链本身。构建产物是编译优化打包的产物任何一环都可能吃掉代码尤其是tree-shaking、minify这类优化环节——优化器觉得没用的代码会被删掉即使它有用。第三修复要落在运行的东西上。当时如果只改源码不修产物——构建一次又可能丢一次。先让线上恢复正常改产物再让源码正确改源码最后让流程防复发构建后自动验证。三层都要做只做一层是假修复。结尾头像修好后我们给构建流程加了一步构建完成后自动在产物里验证关键逻辑比如greplocation.origin找不到就报警。从那以后这种编译吃掉代码的事再没发生过——因为构建产物不再是黑盒每次发布都被验证过。源码是愿望产物是现实。别问我是不是写错了——去问产物里到底有没有。你的代码没丢只是编译器替你做主了。完本文是多Agent派发系统系列第36篇。第35篇讲AI幻觉把见过当做过这一篇讲构建产物丢失把写过的当没有——都是现实与期望不符的灵异事件一个出在AI一个出在编译器。