Claude Code 翻车现场:那些 AI 代码让我踩过的坑

先说好,笑归笑,该学的还得学

前面几篇说了 Claude Code 那么多好话,今天得来点真实的——AI 写代码的翻车现场。

不吹不黑,Claude Code 确实帮了我很多,但有些它写的代码真的让我想摔键盘。下面这几个坑,都是我亲身踩过的,每条都是血泪史。

翻车一:"这个 API 你从哪本书里看的?"

标题党版: 《震惊!AI 调用了一个不存在的 API,Debug 花了两小时》

事情是这样的:我让 Claude Code 帮我写个文件上传功能,它刷刷刷写完了,看起来没啥问题。一跑——报错:TypeError: fs.readFileBlob is not a function

我愣了三秒。readFileBlob??Node.js 啥时候有这函数了?一查,根本没这玩意儿。AI 自己编了一个 API 出来。

事后复盘: AI 的"幻觉"问题。它可能模糊记得有个类似的函数,但名字记岔了。现在我每次让它调用不熟悉的 API 时,都会加一句"请确认这个函数在 Node.js 18 中确实存在"。效果好了很多。

翻车二:"for 循环里改了 i,你是想上天吗"

标题党版: 《一个 for 循环引发的死循环惨案》

for (let i = 0; i < items.length; i++) {
  if (items[i].status === 'done') {
    items.splice(i, 1);
    i--; // ← AI 在这里改了 i
  }
}

等等,好像 AI 加了个 i--,看起来是为了 splice 后索引不偏移……但是!如果你在 for 循环里改了迭代变量,在某些奇怪的逻辑组合下,循环直接原地去世。

事后复盘: AI 没考虑到 splicei-- 组合在某些边界条件下会导致死循环。正确的做法是用 filter 或者从后往前遍历。从那以后,我让 AI 处理数组时都会加一句"用 filter 或者 map,别手写循环"。省心。

翻车三:"补丁漏了一行,白屏一小时"

标题党版: 《AI 修了一个 bug,又引入了两个 bug》

前端项目有个白屏 bug,排查了半天定位到是一个条件判断写反了。让 Claude Code 帮忙修,它说"找到问题了,改好了"。我不放心 diff 了一下——确实改了那个条件判断,但同时它把一个 return 语句给删了!

修完一跑,白屏依旧。又查了半天才发现那个被删的 return

事后复盘: AI 做修改的时候,有时候会"顺手"改掉不该改的东西。现在我对 AI 的改动必做 diff,哪怕它只是改一行,我都要看看它有没有"顺手"改别的。

翻车四:"你改我依赖版本干嘛?!"

标题党版: 《AI 悄悄改了 package.json,项目崩了一地》

让 Claude Code 加一个功能,它说需要装一个新依赖。装就装嘛,很正常。结果它不光装了新依赖,还把 react-scripts 从 5.0.1 改成了 5.0.0,把 typescript 从 5.3 降到了 5.1。

我完全不知道它是觉得"5.0.0 更稳定"还是手滑了。项目直接跑不起来,因为新语法不兼容老版本 TS。

事后复盘: 解决方案就是在 CLAUDE.md 里写死:"不允许修改 package.json 中的依赖版本,除非明确要求。" 从那以后,AI 再也没碰过我的依赖版本。

翻车五:"AI 帮我写的注释,比代码还长"

标题党版: 《这段代码写了 10 行,注释占了 20 行》

// 这段代码的作用是获取用户列表
// 它会调用 API 接口 /api/users
// 然后解析返回的 JSON 数据
// 接着遍历每个用户
// 对每个用户做一些处理
// 最后返回处理后的结果
// 注意:这里可能会有性能问题
// 如果用户数量很多的话
// 建议加上分页
// 或者使用虚拟列表
const getUsers = async () => {
  const res = await fetch('/api/users');
  const data = await res.json();
  return data.map(...);
};

看到这个我真的哭笑不得。代码看两眼就明白的事,AI 给我写了满满一屏注释。不是不好,是没必要。

事后复盘: 我现在用 Skill 定义了注释规范——"只在逻辑复杂的地方加注释,不要为每一行写注释。" 你可以写一个 docs Skill,预设好你的注释风格。

写在最后

说了这么多翻车故事,你可能会觉得"AI 写代码不靠谱啊"。其实不是的。

这些问题就像你新带一个实习生——他会犯各种错,但你能教他、引导他、跟他一起成长。Claude Code 也一样。它的"下限"比新手高,但"上限"取决于你怎么用。

这 6 篇文章从入门到进阶,从命令到 Skill,从配置到避坑,希望对你有所帮助。

如果看完你觉得"我得试试",那就是我写这 6 篇最大的意义了。去终端敲个 claude 吧,跟你的新编程搭档打个招呼。

👋 系列完结,感谢阅读!

comments powered by Disqus