Cloudflare Workers Git 部署静态站:没有 wrangler.jsonc 就是白给
把一个 Next.js output:"export" 的静态站部署到 Cloudflare,照理是最简单的场景。结果在新版控制台折腾了半小时:构建成功、命令跑完、但页面就是 404 或报 Missing entry-point。最后发现根因藏在一个不起眼的 UI 变化里。
现象
在 Cloudflare 控制台走「Workers & Pages → Create → Connect to Git」流程,最终的"Create and deploy"页显示:
- Deploy command:
npx wrangler deploy - 没有"Build output directory"输入框
触发部署后,日志里出现:
✘ [ERROR] Missing entry-point: specify it in wrangler.toml, pass it directly,
or specify a [site.bucket] or [assets] config.
或者部署看起来成功,访问 *.workers.dev 却全是 404。
根因
Cloudflare 已将 Pages 产品合并到 Workers。老的 Pages Git 流程有一个独立的"Build output directory"字段,Workers 引擎会自动把构建产物注入为静态资源。而新的 Workers Create 流程没有这个字段——它期望你在仓库里提交一份 wrangler.toml 或 wrangler.jsonc,告诉 npx wrangler deploy 去哪里取文件。
普通静态站(Next export、Vite、plain HTML)根本没有这个配置文件,于是 wrangler deploy 拿着空仓库一脸懵,不知道要上传什么。
2026 年后 Cloudflare 控制台默认进入 Workers 创建向导,终止了 Pages 原有的「输出目录」配置方式。如果你的仓库里没有 wrangler.jsonc / wrangler.toml,npx wrangler deploy 直接报 Missing entry-point 或静默上传空内容。
正解
在仓库根目录提交一个 wrangler.jsonc,声明一个 assets-only Worker(只有静态资源,没有 main 脚本入口):
{
"name": "my-site",
"compatibility_date": "2026-06-05",
"assets": {
"directory": "./out", // 相对于仓库根的构建输出目录
"html_handling": "auto-trailing-slash", // /about → /about/index.html,干净 URL
"not_found_handling": "404-page" // 访问不存在路径时返回 out/404.html
}
}Monorepo 场景把 directory 指向子包输出,例如 "./apps/www/out",Path 保持 /(repo 根),构建命令从根执行以确保 workspace 依赖正确解析:
pnpm install && pnpm --filter www build
Deploy command 保持默认 npx wrangler deploy,现在它能找到配置,直接上传 out/ 下的所有文件到 Cloudflare 边缘。
wrangler.jsonc 里只需 assets.directory,不要 main。html_handling: "auto-trailing-slash" 处理干净 URL,not_found_handling: "404-page" 接管 404。提交这个文件,构建 + 部署即可全自动跑通。
附:什么时候改用 Pages
如果你的域名 DNS 不在 Cloudflare 托管(比如在阿里云、Namecheap),优先选 Cloudflare Pages 而非 Workers:
- Workers 自定义域名要求整个 Zone 迁移到 Cloudflare nameserver
- Pages 支持外部 DNS 添加一条 CNAME 指向
<project>.pages.dev,Cloudflare 自动签发证书,不用迁移 DNS
在 2026 版 UI 里找到 Pages 入口:进入 Workers Create 向导后,在"Select a method"那页最底部有一行小字 "Looking to deploy Pages? Get started",点它才会进入有「Build output directory」字段的真正 Pages 流程。
DNS 在 Cloudflare = Workers assets 方案更简洁;DNS 在外部 = Pages + CNAME 更省事,无需迁移 nameserver。
一句话外卖
Cloudflare Workers Git 部署静态站,必须在仓库提交
wrangler.jsonc(assets.directory指向构建输出),否则npx wrangler deploy无从得知要上传什么。