当AI生成代码从“玩具”走向“生产”,前端工程师的噩梦才刚刚开始。

近日,一位资深前端开发者在技术社区发布了一篇题为《我review了一份Vibe Coding写的前端代码——能跑,但5个地方迟早要命》的文章,引发业内广泛共鸣。作者以第一视角复盘了其对一份完全由AI“随性编程”(Vibe Coding)生成的前端代码库进行代码审查的全过程,结论令人警醒——项目确实“能跑”,但埋藏在代码深处的五个致命隐患,注定会让接手的工程师和团队付出沉重代价。

隐患一:状态管理混乱,数据流失控

第一个引发警觉的问题是状态管理。AI生成的代码大量使用了组件局部状态和全局单例混合的模式,组件之间的数据传递依赖隐式的共享对象和事件总线。“我找不到一个清晰的数据流方向,”作者在文中写道,“同一个用户信息在五个组件里有五种不同的更新方式,猜测哪一份数据是‘真的’,成了最耗时的调试工作。”这在功能演示阶段不会暴露,但一旦涉及多用户协同或实时数据更新,状态错乱将直接导致UI渲染异常和逻辑误判。

隐患二:隐式any泛滥,TypeScript形同虚设

第二个致命问题在于类型安全。AI为了“省事”和“能跑”,大量使用any类型绕过TypeScript的编译检查。API响应、事件对象、配置参数几乎全是未经校验的any。作者指出:“表面上看编译通过了,但这些any像一颗颗定时炸弹,任何一次数据格式变更,都会在运行时以难以追踪的方式炸开。”类型系统的存在本是为代码构建安全网,AI却在生成代码时主动拆毁了它。

隐患三:依赖臃肿,性能与安全双输

第三处隐患是依赖管理失控。这份前端代码中,AI引用了大量第三方库——有些仅为一个工具函数就引入整个库,有些库版本过旧且存在已知CVE安全漏洞。“整个node_modules体积接近800MB,首屏加载时间在低配设备上超过8秒。”作者无奈地表示,AI并不知道“最小化依赖”的工程原则,它只知道“能跑就行”,结果是用户为每一个多余的字节买单。

隐患四:错误处理缺失,异常静默吞没

更令人不安的是错误处理逻辑。阅读代码时,作者发现整个项目几乎没有捕获异常的层级策略。API调用失败后,错误对象被静默吞掉,页面停留在加载状态,用户得不到任何反馈。更为严重的是,部分操作的失败路径竟然直接重置了整个应用的状态。“用户点一个按钮,如果网络抖动一下,整个页面白屏。”这种在演示中几乎不会被注意到的漏洞,触达生产环境后将成为灾难性的用户体验事故。

隐患五:死代码与重复逻辑,维护者寸步难行

最后一个“迟早要命”的问题是代码结构的不可维护性。AI在反复迭代中留下了大量未被调用的死代码、废弃组件和互相矛盾的辅助函数。同一个逻辑功能存在三个版本,各自略有出入,AI在生成新代码时只是“叠加”而非“替换”。作者形容:“这就像堆叠积木,永远不倒,但你永远无法知道抽掉哪一块会轰然崩塌。”对于未来接手维护的团队而言,这无异于一场灾难。

冷静审视:Vibe Coding需要工程护栏

文章发布后,评论区迅速分为两派。乐观派认为,AI编程降低了下限,让更多想法能快速变成原型;而务实派则强调,AI可以负责“写”,但人类必须负责“审”和“管”。这位开发者在文末总结道:“Vibe Coding不是原罪,原罪是缺乏工程护栏。AI写得快乐,不代表你能上线得放心。”

事实上,这早已不是个案。随着AI辅助开发工具的普及,“AI生成代码”正加速进入各类业务系统。然而,代码“能跑”只是起点,离“能维护”“能上线”“能扛住流量”还有遥远的距离。对于企业和开发者而言,如何在享受AI效率红利的同时,建立严格的代码审查、质量校验和架构治理机制,将是从工具竞争迈向工程能力的下一次分水岭。

毕竟,Demo是周末的烟花,生产系统才是每天都要面对的日出。