返回博客

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.tomlwrangler.jsonc,告诉 npx wrangler deploy 去哪里取文件。

普通静态站(Next export、Vite、plain HTML)根本没有这个配置文件,于是 wrangler deploy 拿着空仓库一脸懵,不知道要上传什么。

坑:新建 Workers 流程没有「输出目录」字段

2026 年后 Cloudflare 控制台默认进入 Workers 创建向导,终止了 Pages 原有的「输出目录」配置方式。如果你的仓库里没有 wrangler.jsonc / wrangler.tomlnpx 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 边缘。

正解:assets-only Worker 配置

wrangler.jsonc 里只需 assets.directory,不要 mainhtml_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 流程。

Pages vs Workers 选择依据

DNS 在 Cloudflare = Workers assets 方案更简洁;DNS 在外部 = Pages + CNAME 更省事,无需迁移 nameserver。

一句话外卖

Cloudflare Workers Git 部署静态站,必须在仓库提交 wrangler.jsoncassets.directory 指向构建输出),否则 npx wrangler deploy 无从得知要上传什么。