如果你使用 Wrangler 构建,你所掌握的大部分内容同样适用于 cf。本页说明哪些会变化、如何在现有 Wrangler 项目旁使用 cf,以及何时迁移项目本身。
Workers、绑定、兼容性日期、版本和部署的工作方式相同。迁移时,cf migrate 会保留 Worker 名称、绑定、资源 ID、路由和触发器。.dev.vars 中的本地 secrets 在 cf dev 下继续有效。
这两种工具的主要差异是:
| 方面 | Wrangler | cf |
|---|---|---|
| 覆盖范围 | Workers 以及部分 Cloudflare 产品 | 公开 Cloudflare API,包含 2,900 多条命令 |
| 登录 | wrangler login |
cf auth login,使用自己的凭据 |
| 项目配置 | wrangler.jsonc 或 wrangler.toml |
用 TypeScript 编写的 cloudflare.config.ts |
| 环境 | 用 --env 选择的 env 块 |
用 --mode 选择的模式 |
| 构建 | Wrangler 的打包器 | Wrangler 的打包器或 Cloudflare Vite 插件 |
| 可部署产物 | Wrangler 内部管理 | .cloudflare/output/v0/ 中的 Build Output |
| 输出 | 许多命令使用表格,部分支持 --json |
大多数 API 命令使用 JSON |
| 资源标识符 | 许多资源使用名称 | Cloudflare API 期望的 ID |
| 本地与远程数据 | 部分命令默认使用本地数据 | 远程。--local 仅适用于受支持的 KV、D1 和 R2 命令 |
例如,Wrangler 接受 D1 数据库名称,而 cf 期望数据库 ID:
wrangler d1 execute my-database --remote --command "SELECT 1"
cf d1 query <DATABASE_ID> --sql "SELECT 1"完整等效列表请参阅 Wrangler 到 cf 参考。
你无需迁移项目即可开始使用 cf。资源和账户命令(例如 cf d1 list 或 cf r2 buckets list)可在任何目录中工作,包括未迁移的 Wrangler 项目。它们不会读取 Wrangler 配置文件,因此不会使用其中的 account_id。请设置 CLOUDFLARE_ACCOUNT_ID,或在 cf 询问时选择账户。详情请参阅选择账户。
在迁移项目之前,请继续使用 Wrangler 进行开发和部署,例如 wrangler dev 和 wrangler deploy。使用 cf 处理账户和资源任务,包括 Wrangler 未覆盖的产品。
cf 不会复用你的 Wrangler 登录。首次运行 cf 之前,请安装并登录。在自动化中,这两种工具都会读取 CLOUDFLARE_API_TOKEN 和 CLOUDFLARE_ACCOUNT_ID。
cf dev、cf build 和 cf deploy 读取 cloudflare.config.ts。它们不会读取 wrangler.jsonc 或 wrangler.toml。在尚未迁移的 Wrangler 项目中,结果取决于项目:
| 项目 | 结果 |
|---|---|
| 没有框架或静态资源的 Worker | 命令失败,并显示 cloudflare.config.ts is required when --experimental-new-config is enabled. 以及堆栈跟踪。 |
| 使用 Cloudflare Vite 插件的 Worker | 自动配置会为单页应用写入新的 cloudflare.config.ts,不包含你的入口或绑定。在没有 index.html 的项目中,cf build 会失败并显示 Cannot resolve entry module index.html,cf dev 会返回 404 响应。 |
静态资源目录包含 index.html 的 Worker |
自动配置将项目视为静态站点,并写入 cloudflare.config.ts 和 wrangler.config.ts。cf build 会成功,但结果是以 package.json 命名的静态资源 Worker,不包含你的 Worker 代码或绑定。 |
当自动配置运行时,它还会更改 package.json,包括 deploy 脚本。它也可能更改 lockfile、.gitignore 和 vite.config.ts。没有终端时(例如在 CI 中),它会在不请求确认的情况下进行这些更改。
如果这些命令已经在项目中运行过,请在迁移前撤销其更改:
- 运行
git status列出已更改和新的文件。 - 还原每个已更改的文件,例如使用
git restore package.json。 - 删除
git status列出的每个新文件,例如cloudflare.config.ts、wrangler.config.ts和.cloudflare/目录。 - 运行
cf migrate。在cloudflare.config.ts存在时它不会运行。
在以下情况下迁移项目:
- 用 TypeScript 编写配置,并从中推断绑定类型。
- 用同一个 CLI 处理项目、账户和资源任务。
- 构建一次,稍后部署同一 Build Output,例如从 CI 部署。
如果项目依赖仍需要 Wrangler 的内容中列出的任务,请暂时继续使用 Wrangler。
cf migrate 读取 Wrangler 配置文件,并在其旁边写入 cloudflare.config.ts。它会转换绑定、路由、触发器和环境,并将 cf 添加为项目的开发依赖。除非项目已经使用 Cloudflare Vite 插件,否则它会保留 Wrangler 的打包器,因此你无需为了迁移而采用 Vite。
预览更改,然后运行迁移:
cf migrate --dry-run
cf migrate某些设置之后需要手动处理,例如 Durable Object 迁移、Workflows、Containers 和软件包脚本。cf migrate 会列出每项,并在生成的文件中标记它们。有关 Workflows 和 Containers,请参阅 Workflows 和 Containers。完整流程请参阅迁移 Wrangler 项目。
cf 处于 Beta 阶段,尚未覆盖所有 Wrangler 任务:
- 实时日志:
cf尚不能流式传输实时日志。请运行npx wrangler tail <WORKER_NAME>,而不是安装 Wrangler。 - 单个 secret:
cf尚不能设置单个 secret。有关选项,请参阅尚不支持的命令。
Wrangler 不会读取 cloudflare.config.ts。如果你仍在已迁移的项目中运行 Wrangler 命令,请在不再需要它们之前保留 Wrangler 配置文件。