Workers 怎么部署静态网站?
我在本地写了一个没有 main、只有 assets 的 wrangler 配置,wrangler dev --local 就能把一个目录当静态站点跑起来,访问不存在的路径还会返回 404。
答案是:在 wrangler 配置里加 assets,指向静态文件目录,wrangler deploy 就把它们作为版本的一部分部署。要加动态逻辑,再补上 main 和 binding。
两种形态的差别只在请求有没有机会进入 Worker 代码,而这又直接关系到计费。下面按问题说。
纯静态站点的配置怎么写?
下面的配置没有 main,只有 assets,我在本地验证过:
{
"name": "site",
"compatibility_date": "2026-10-01",
"assets": { "directory": "./public", "not_found_handling": "404-page" }
}wrangler dev --local 下,访问 / 返回 public/index.html,访问不存在的路径返回 404.html 且状态码为 404;wrangler deploy --dry-run 和 versions upload --dry-run 都能识别它。这就是「纯静态站点」形态:没有 Worker 代码,匹配文件直接由平台返回。
想加动态逻辑怎么办?
加上 main 和 binding,就是「静态资源加动态 Worker」形态:没有匹配文件的请求进入 Worker,Worker 可以自己响应,或者调用 env.ASSETS.fetch(request) 回落到静态文件。
run_worker_first 可以反过来,让指定路径(如 /api/*)先走 Worker,支持用 ! 排除,官方配置页写的上限是 100 项。
静态资源怎么计费,有什么限额?
官方文档的说法:命中静态资源的请求免费且不限量,会调用 Worker 脚本的请求按 Workers 计费。限额页写的是每个 Worker 版本最多 20,000 个文件(免费)或 100,000 个(付费),单文件 25 MiB。
有一个坑要注意:run_worker_first 会让匹配的请求总是调用 Worker,免费额度用尽后这些请求会得到 429,而不是回落到静态文件。
静态资源和回滚是什么关系?
静态资源是版本的一部分,所以它们和代码一起被回滚。回滚能回什么、不能回什么,见 Cloudflare Workers 部署出问题了,怎么回滚?。
配置示例的本地行为我在 wrangler 4.151.3 上用wrangler dev --local和--dry-run验证过。计费、限额、run_worker_first的上限与 429 行为来自 2026 年 10 月的官方文档,我没有在线上验证。限额会变化,以官方文档为准:静态资源、Workers 限制。