我使用 Claude Code 开发 Rolldown 的体验
TL;DR 没有魔法,只有聪明的模型 + 合理的 Prompt最初的尝试与误区真空中的圆形 JavaScript/TypeScript、Rust 专家把 AI 当人进行协作AGENTS.md/CLAUDE.md 很重要我的实际体验AI 不是许愿机一些想法
TL;DR 没有魔法,只有聪明的模型 + 合理的 Prompt
几个月前,我自认为对 AI 认知是比较贴切,能写点脚本、做下网页开发,但处理不了 Rolldown 这种复杂度的项目。
而现在,过去两周里,它几乎替我写了所有的代码。整个流程没有魔法,只有跟着官方文档《Claude Code: Best practices for agentic coding》的笨拙使用,仅仅是这样,就已经颠覆了我的认知。
本文并非教你怎么使用 Claude Code,尽管有一定的参考价值。对我来讲,就是一篇流水账,我想到那写到哪。
但我想,仅仅是记录事实就已经很有价值了。就像我在知道 Claude Code 的开发人员在高强度使用 Claude Code 开发 Claude Code 后,那我觉得,如果我没能用好 Claude Code ,那一定是我的问题,而不是 Claude 在做营销。
这让我强迫自己去在 Rolldown 上尝试 Claude Code ,最后发现没有什么难的,Claude Code 也确实能处理 Rolldown 复杂度级别的项目。
就像你刚刚看到我写的”过去两周里 AI 几乎帮我写了所有代码“后,不要想是不是这傻 X 又在这里夸大其词,贩卖焦虑。而是想想,要是这是真的,你该怎么适应这个浪潮。
最初的尝试与误区
我第一次用 Claude Code,是被太狼半推着去尝试的。说实话,那次体验其实不算成功。
Claude Code 能解决问题,但花的时间和我自己手写几乎一样多。更糟的是,我需要不断地指挥它:“这么做”、“那样改”、“这段逻辑错了”。
在那次试验结束后,我和太狼还有其他同事讨论,我们当时得出的结论是,Claude Code 确实聪明,但上下文还不够,对于 Rolldown,NAPI-RS, OXC 这些不在预训练里的知识,他的 Context 承受不住那么多要现记的信息和复杂度。
理由看起来很像那么回事——上下文窗口有限、仓库体量大、逻辑层次多。但回头看,这个结论错得离谱。
真空中的圆形 JavaScript/TypeScript、Rust 专家
我们当时犯的第一个错误,是低估了 AI 的后天理解能力。虽然它的预训练语料里没有 Rolldown,也许只学过 Webpack、Rollup 这些 bundler,但这不意味着它无法理解 Rolldown 的代码。
想象一个真空中的圆形 JavaScript/TypeScript、Rust 专家——他只懂 JavaScript/TypeScript 、 Rust 和 编译原理、工程常识,完全不了解什么是 Bundler。
但如果你把 Rolldown 的源码丢给他,他真的会看不懂吗?
Rolldown 本质上就是复杂但可推理的业务逻辑,是用 TypeScript 和 Rust 编写的。
Claude Code 或许没见过 Rolldown,但它理解代码, Rolldown 的代码从本质上来并不特殊,确定的语句是确定的执行结果。
把 AI 当人进行协作
在尝试归因,分析 AI 背后的逻辑时候,我发现一条极其符合直觉但又不容易注意到的原则——就是把 AI 当成人类。
在想通这条后,我发现一切事情都变得合理起来。你可以认为 Claude Code 就是先天能力极强,具有人类所有知识的人,同时又带有极为强大的后天学习能力,能够从已知的知识作为基点理解新知识。
那对于 Rolldown 来讲,就像多了个刚入职,经验知识堪比超人,只是不懂的 Rolldown 的新同事。它不仅自己能够理解 Rolldown 的代码,如果你愿意做个负责任的导师,给他指引,他会更加出色!
不然就等于招了个新人,扔到代码库里一句话都不讲,让他自个儿悟。这出问题是活该——对 AI 也一样。
AGENTS.md/CLAUDE.md 很重要
AGENTS.md 就是写给新入职同事看的项目文档,你写的好,你的超人同事就做得好,你写的混乱,你的超人同事就认为内裤外穿是时尚,你不写,那就听天由命了。
举个 Rolldown 中的例子,Rolldown 的核心逻辑部分是在 Rust,最外层是 TypeScript 用来提供 API。 Claude Code 经常出现的一个行为是顾头不顾腚。让他改某个选项命名,如果不加对应的指令,要么是只改了 Rust 侧,要么是动了 Node 侧。在多次发生这个现象后,我在文档里加了句
- **Trace through all three layers:** When working with options or behavior, always trace from TypeScript API → NAPI Bindings → Rust Core to understand the full flow.
自此以后再也没出现过不合预期的行为。
这同时也暗示了另一个点,AGENTS.md 是要长期维护的,你要根据模型的行为和项目本身特征来构建和更新合适的指令。
这里面没有什么 prompt engineering 啥的玩花活,就是单纯的实践,反馈,更新。
就像我自己作为人类,有些重要的活动,我会给自己分别设置,提前一天,提前2个小时,提前半小时,提前 15 分钟,提前 5分钟的闹钟来提醒自己。
这对 AI 也是一样,想避免他跑偏就要给他提示——把关键的流程、风格、边界条件写进 AGENTS.md,并在任务指令里点名这些边界。
我的实际体验
我只使用 Claude Code 的 Plan Mode
所谓重剑无锋,大巧不工。我敲给 Claude Code 的指令都很直白
- Deprecate top level
inject,defineand addtransform.inject,transform.define
- Refactor
rebuild_strategyfrombooltoenumand be compatible with previous code
我构建指令的时候,会根据任务复杂度来决定详细程度,大部分情况下是一句话,有时是两三段话,极少太复杂的情况下,会是一篇小文章。根据你本身对项目的理解和对 Claude Code 的熟悉,你会越来越擅长构建他能理解的指令。
当然你自己也要学会拆分任务到子任务,感谢 https://www.stacking.dev 这已经变成我的肌肉反应了。
我个人体感,在 90% 的情况下,他能一次性给出符合我预期的变动计划。很少的情况才需要我去做机枪左移五米的微操。
AI 不是许愿机
使用下来,Claude Code 的强大是显而易见的,但它不是许愿机,我总结了下,这些场景中他都无法满足我的需求
- 我自己都没有明确思路的 bug 修复或架构改动
- 重构我不理解的,别人写的代码
- 结果标准模糊、判断依赖主观经验的任务
在这些况下,我更倾向于让 Claude 辅助我思考,而不是让它直接产出结果。
一些想法
- 我本人对 AI 的了解是很浅的,只停留在宏观理解上,比圈内人差远了。但你可以注意到,我的经历上没有任何要求专业的地方,包括 prompt engineering ,什么都不需要懂,就是单纯的按部就班就行。
- 不论是对 Claude Code 的使用,还是其他 AI 工具,我都停留在一个比较浅薄的阶段,这里面其实还有很多能深挖的东西。但是即使这样的程度,就已经做到令人惊叹的效果了。
- 本文说是开发 Rolldown,其实体验部分没怎么讲,因为没什么的特殊的要点和技巧,就是正常使用 Claude Code CLI。
- 公司这边有提供 AI 专用的报销额度,这个真的很有用。说真的,按照开始我对 AI 的态度,你 20$ 让我订阅,我都觉得浪费钱。只是说公司既然报销,那我就用着试试。但现在,让我自己掏 200$ 每月我都愿意。
- 我其实是不想写这篇文章的,因为觉得发出来会引起焦虑,因为我也为此焦虑过。不过想想,解决焦虑的办法不是当鸵鸟,而是去面对,希望能起到些指导作用吧
在我高强度实践 AI 的时候,刚好看了了罗永浩和影视飓风的那期对谈,TIM 说了些很触动我的话,回忆起来大概是
懂的人已经在疯狂使用;还没上手的人,还把它当玩具。配合现实的迭代速度,你很难不感到既兴奋又不安。