Wrangler 项目要不要迁移到 cf?先检查配置,再换部署命令

迁移前检查配置与依赖,处理 Durable Objects、环境模式和构建事项,避免直接替换部署命令造成配置遗漏。

把应用部署到土耳其|BRNCHOST · 土耳其 VDS
云服务器,积分可续期|雨云 · 国内外节点 · 积分兑换权益
低价年付,大流量 VPS|RackNerd · SSD 存储 · 1Gbps 端口
香港轻量,搭个小站|晚安云 · 香港云服务器
香港 VPS,大带宽可选|野草云 · BGP 直连
大陆访问,精品线路|搬瓦工 · CN2 GIA / CTGNet 套餐
资料归档,交给 AI 整理|WorkBuddy · 本地文件处理
建站起步,先看应用镜像|腾讯云 · 轻量应用服务器
CN2 GIA,中国方向优化|DMIT · Premium 网络
双 ISP 原生住宅 IP|丽萨主机 · 美国 9929 精品线路
高频 CPU,多地部署|Evoxt · 云服务器 · 每周异地备份
京东云轻量云主机:129元/年,新人专享,限购1台

看到 Cloudflare 新 CLI 的消息,最容易顺手做的一件事,是把 package.json 里的 wrangler deploy 改成 cf deploy。两个工具都能发布 Worker,名字看起来像直接替代关系。但现阶段这样改,可能让程序部署成功了,配置却不是原来那份。

cf 于 2026 年 9 月 28 日进入 Beta。它扩展了公共 API 的覆盖范围,也引入 TypeScript 项目配置。对已有 Workers 项目,决定是否迁移,应该从运行依赖和配置差异开始,而不是从安装命令开始。

先判断是不是必须迁移

如果需求只是查 DNS、列出 R2 桶或管理账户资源,可以直接使用 cf 的资源命令。项目开发和发布继续交给 Wrangler,不需要先动应用配置。

真正需要考虑迁移的情况,是团队希望配置有类型提示、希望统一项目与资源操作,或者希望构建一次后重复部署同一份产物。仍依赖 Wrangler 特定能力的项目,则可以保持现状。

当前官方说明,实时日志流和单个 secret 设置还有操作需要 Wrangler。因此“覆盖整个公共 API”不等于“每一种开发工作流都已经替代完成”。Wrangler 用户指南

两份配置文件不会自动互认

Wrangler 使用 wrangler.jsonc 或 wrangler.toml,cf 项目使用 cloudflare.config.ts。后者出现以后,cf 不再用旧文件作为项目配置;Wrangler 也不会读取新文件。

这会产生一个实际风险:配置迁了一半,脚本仍调用 Wrangler,看到的仍是旧绑定。另一个风险是反过来的,脚本已经改成 cf,但新配置缺少原来的入口、路由或环境定义。

官方文档列出了未迁移项目直接运行 cf build 的不同结果。有的项目报错;有的静态资产项目被自动识别成静态站点,构建甚至可以成功,但生成的配置没有原来的 Worker 代码和绑定。构建成功不能当成迁移完整的证据。

最稳妥的准备,是先记录现有 Worker 名称、入口文件、兼容日期、路由、资源 ID、环境和部署命令。代码差异容易审阅,少了一个触发器却可能只在定时任务运行时才被发现。

在干净的分支里预览迁移

确认 Node.js 至少为 22.18,保留当前 lockfile,然后在独立分支进行:

git status --short
cf --version
cf migrate --dry-run

如果目录有未提交改动,先按照团队流程保存,不要用 --force 跳过检查。这里的“干净”包括未跟踪文件;把本来的工作和迁移生成物混在一起,会让回退和审查都更难。

预览时检查工具准备写哪些文件,是否识别了正确的配置文件,以及选择了哪个构建器。项目可能沿用 Wrangler bundler,也可能已经使用 Cloudflare Vite 插件;迁移不要求所有项目都改用 Vite。

cf migrate 帮助中列出的预览与迁移参数

迁移命令提供的构建器、预览和安装选项。

确认预览以后再运行 cf migrate,随后查看 git diff。工具处理大部分转换,但它生成的文件不是不可质疑的最终答案。迁移完整流程

TODO 要解决,不要只把阻止构建的代码删掉

遇到需要人工处理的项目,迁移器会加入 TODO(@cloudflare)。有必需事项时,还会在文件顶部生成 throw,防止后续构建发布。

这类阻断说明有配置尚未完成。为了让构建继续,直接删除 throw,却不处理下面的绑定和生命周期,相当于把提醒关掉了,问题还在。

Durable Objects 尤其需要认真看。迁移器不会简单转换旧 migrations 历史,需要按已经在线运行的类声明相应 exports,并匹配现有 storage。已经执行过的重命名、删除或转移记录,不应机械复制成新的操作。

同样,Workflows、Containers 和部分构建设置也可能需要手动处理。读懂 TODO 对应的资源,再决定配置;不要凭“它大概是这个字段”去猜。程序化配置说明

环境名变化,会影响发布目标

Wrangler 常用 --env,cf 使用 --mode。迁移器会把环境转换为按 ctx.mode 分支返回的配置。

cf build --mode staging
cf deploy --dry-run --mode staging

这里应重点检查 staging 里的 Worker 名称和所有资源 ID。预发布环境的配置必须完整,不能认为顶层变量或绑定会自然继承过去。

还要注意 Vite 的默认 development、production 模式。如果原环境恰好叫这两个名字,迁移器可能要求人工审阅。一次未显式传 mode 的本地构建,可能选中与你预期不同的分支。

因此,审查时用一张简单清单对应每个环境:Worker、路由、数据库、队列、定时任务、secrets 声明。不要只对比文件行数。CLI 变了,真正不该变的是应用访问的那组资源。

数据库迁移需要额外小心

D1 旧配置中的迁移目录、文件匹配和迁移表参数,不能假设都会直接带进新配置。官方说明这些需要对应到 cf d1 migrations apply 的参数。

更关键的是默认作用位置:cf d1 migrations apply 默认操作远程数据库,只有加支持的 --local 才指向本地。旧脚本如果习惯本地默认值,迁移时必须重新审阅。

cf d1 migrations apply --help

先读当前版本帮助和数据库 ID,不要在迁移项目配置时顺手执行数据库迁移。代码配置转换、数据结构变更、远程发布是三种不同动作,最好分别留证据和回退安排。

构建工具没换,也要检查 build 的前后步骤

有些项目在构建之前生成样式、类型或静态文件。cf build 调用构建器,并不自动执行你 package.json 中任意自定义的 build 脚本。换入口时要检查原来的前置步骤是否仍被调用。

如果沿用 Wrangler bundler,部分构建选项会转移到 wrangler.config.ts。使用 Vite 时,则需要将对应选项放进 vite.config.ts。把所有选项都塞进 cloudflare.config.ts,并不能让它们自动生效。

此外要提交必要配置和锁文件,将 .cloudflare/ 生成目录加入忽略规则,并按官方说明处理模块类型及生成类型文件。命令与字段对照

先本地,再 dry run,再预发布

解决所有必需 TODO 后,运行本地开发,检查真实入口、绑定和关键接口;再构建与预览部署:

cf dev
# 停止开发服务后再执行
cf build
cf deploy --dry-run

对每个实际环境重复验证。dry run 不上传,但也不能替代预发布环境里的功能测试。它看不到真实账号权限、远程资源数据和外部服务行为。

最终正式发布前,应确认脚本调用的是 cf、新配置指向正确资源,并保留已知可用的代码和配置。如果后续还需要 wrangler tail,暂时保留旧配置,知道哪一条命令读哪一份文件。

迁移完成的标志,是应用按预期运行、各环境目标正确,而不是旧配置文件已经被删除。