这两天。 我在做一件憋了很久的事。
迁移。
把跑在 Vercel 上的项目,搬到 Cloudflare。
为什么迁?
说出来其实很朴实:
Vercel 每个月收我 20 刀。

我受不了了。
不是说 Vercel 不好。 它真的很好用。 好用到你不用懂任何基础设施,点几下就能上线。
但好用是有代价的。
每个月看着账单扣款的时候。 我就会忍不住想一个问题:
我到底在为什么付费?
是技术能力? 还是"我懒得自己折腾"的溢价?
这次我决定动手了。
但这次有点不一样。
我没有一行一行自己扒代码。 没有一个坑一个坑靠 Google 趟。
我用的是 OpenClaw。
OpenClaw 是一个可以真正帮你干活的 AI Agent 平台。
不是问一句答一句的那种。 是你说"帮我把这个项目迁到 Cloudflare"。 它真的开始读你的代码、分析依赖、识别问题、一步步执行。
这次迁移,我全程用它跑。
然后我发现了一件事:
用 AI Agent 干工程活,不是"更方便了"。 而是你会被强迫比以前更清醒。
我助理给我的对照图

坑 1:Worker 的 runtime 不是 Node.js
OpenClaw 读完我的代码之后,第一条反馈:
"你这里用了
import crypto from 'crypto',在 Cloudflare Worker 里会报错,需要换成 Web Crypto API。"
我当时还有点懵。
crypto 不是标准库吗?
然后才想起来: Cloudflare Worker 跑的是 V8 Isolate,不是 Node.js。
它更接近浏览器环境。 不是所有 Node.js 原生模块都能用。
以前我对这个有模糊的认知。 但从来没有人在我每写一行相关代码的时候,立刻告诉我"这里会炸"。
OpenClaw 会。
坑 2:bcrypt 在 Worker 免费版直接超时
认证模块用的是 bcrypt 做密码哈希。 标准做法。
OpenClaw 扫到这里,停下来跟我说:
"Worker 免费版 CPU 时间限制是 10ms,bcrypt 一次哈希需要几百毫秒,建议换 PBKDF2。"
我:……
然后它直接帮我把哈希逻辑改成了 Web Crypto API 的 PBKDF2 实现。 同样安全。 Worker 原生支持。 CPU 消耗完全可控。
这个坑,我如果自己迁,大概率要等到线上报错才会发现。
OpenClaw 是在迁移过程中,提前就把它堵上了。
坑 3:better-auth + drizzle-orm 跟 D1 不兼容
我原来用 better-auth 做认证框架,配 drizzle-orm 操作数据库。
迁到 D1 之后。 炸了。
报的是那种玄学报错。 SQL 方言不对。事务方式不对。
OpenClaw 排查完之后结论很清晰:
"better-auth 的 drizzle 适配器和 D1 有兼容性问题,建议换 kysely-d1,对 D1 的支持更原生。"
然后它帮我把 ORM 层从 drizzle 迁到了 kysely-d1。
这不是小改动。 所有 query 逻辑都要跟着重写。
但这件事一个人扛,很容易半途而废。 有 OpenClaw 在旁边一步步执行、一个问题一个问题解决—— 反而跑得很顺。

坑 4:D1 不支持交互式事务
D1 底层是 SQLite。 但它跑在边缘节点,事务不是本地同步的。
我原来有一段逻辑:
await db.begin()
await db.execute(sql1)
await db.execute(sql2)
await db.commit()
D1 里:直接报错。
OpenClaw 解释了原因,然后帮我改成了 D1 的 batch API 写法。 把多条 SQL 打包成一个原子操作提交。 语法变了,但逻辑完全对等。

坑 5:环境变量是两套,本地和线上不互通
Cloudflare 的环境变量管理有两套:
.dev.vars两套独立的。 没有自动同步。
OpenClaw 在配置环节直接提示我:
"你需要同时维护本地的
.dev.vars和线上的 wrangler secrets,缺一个都会导致对应环境拿不到变量。"
这种事看起来简单。 但就是这种"看起来简单"的细节,最容易在深夜被坑。
坑 6:域名切换时两边同时活跃,行为会乱
最后一步,准备把域名从 Vercel 切到 Cloudflare。
OpenClaw 在这里特意停下来跟我说:
"不要两边同时保持活跃状态,建议先在 Vercel 完全下线,等 TTL 刷新,再切 DNS,否则会出现同一域名请求不一致的情况。"
这种错误不会报错。 它是静默的乱。
同一个域名,不同设备拿到的是不同的后端。 你排查半天,找不到任何代码问题。
因为代码没问题。 是操作顺序的问题。

迁完之后算一笔账
Cloudflare 这边:
我现在这个项目的体量: 完全在免费额度以内。
一分不花。
Vercel 那边: 20 刀/月。 12 个月。 一年 240 刀。
不是说 240 刀很多。
但如果这 240 刀买来的只是"方便"。 而你其实可以用 Cloudflare 免费额度跑同样的东西。 那这 240 刀,就是在为"没搞清楚有免费选项"而付费。
迁完之后我第一个感受不是"省钱了"。 而是:
我应该早点迁的。
这次迁移最大的感受
我以为用 AI Agent 干工程活,最大的价值是"省时间"。
确实省了。 但这不是最重要的。
最重要的是:它会强迫你理解每一步在做什么。
不是帮你绕过坑。 而是带你把坑看清楚,再一起过去。
每次 OpenClaw 遇到问题,它都会先解释原因,再给方案。
这导致我迁完之后, 对这套技术栈的理解,比迁之前深了不止一倍。
bcrypt 为什么不行、D1 事务为什么这样设计、ORM 选型为什么会互相影响—— 这些我以前"知道一点"的东西, 这次我真的搞清楚了。
为什么我选择用 OpenClaw 来做这件事
说实话。 这种迁移工作,一个人扛是很消耗心力的。
不只是技术难度。 而是它需要你在极短的时间内, 在十几个不同的技术决策点上, 每一个都做出正确的判断。
一个人很容易:
有 OpenClaw 在一起跑, 它记得每一个细节。 它不会"算了先这样"。 它会一直盯着你把每一个问题真正解决掉。
这是我觉得 AI Agent 和普通 AI 工具最大的区别:
普通 AI 工具是"帮你查资料"。 AI Agent 是"和你一起把事情做完"。
最后
这次从 Vercel 到 Cloudflare。 表面上是一次平台迁移。
实际上是:
而且这次是和 OpenClaw 一起完成的。
这让我更确定一件事:
未来真正有价值的能力,不是会用几个 AI 工具。 而是会用 AI Agent 把一件真实的事情,从头到尾跑通。
一句话总结:
我每月给 Vercel 交 20 刀。 迁到 Cloudflare 之后,这 20 刀没了。 但我得到的东西,比 20 刀值钱多了: 对自己系统更深的理解,和把事情真正做完的能力。