部署到 Cloudflare Pages(手动操作教程)

26 年 8 月 19 日 星期三
594 字
3 分钟

前置条件

  • Node.js >= 18,pnpm >= 8
  • 一个 Cloudflare 账号(本项目已存在 Pages 项目 astro-gyoza)
  • 本机已登录 wrangler(Cloudflare 官方 CLI)

总体流程

整个发布流程只有两步:构建 生成 dist/ 静态文件,上传 到 Cloudflare Pages。两条命令都在项目根目录(astro-gyoza-main/)下执行。

第一步:安装依赖

sh
pnpm install

注意:首次安装后如遇到 [ERR_PNPM_IGNORED_BUILDS] Ignored build scripts: workerd 的提示,需要把 pnpm-workspace.yaml 中 workerd 的值改为 true,然后重新执行 pnpm install,否则 wrangler 无法正常工作。

第二步:构建静态站点

sh
pnpm build

该命令会依次执行类型检查(astro check)、构建(astro build)和生成站内搜索索引(pagefind),最终产物输出到 dist/ 目录。

构建成功后,检查 dist/posts/ 下是否生成了新文章的 HTML,例如 dist/posts/xxx/index.html。

注意:package.json 中的 @astrojs/sitemap 被固定在 3.1.5,不要随便升级。更高的版本(如 3.7.3)与 Astro 4.6 不兼容,构建时会在 sitemap 阶段报错 Cannot read properties of undefined (reading 'reduce')。

第三步:部署到 Cloudflare Pages

sh
pnpm deploy

等价于执行:

sh
pnpm exec wrangler pages deploy dist --project-name astro-gyoza
  • dist:上传的目录
  • --project-name astro-gyoza:Cloudflare Pages 上已有的项目名(不要改,域名 zmy666.me 绑定在这个项目上)

看到 ✨ Deployment complete! 即部署成功,会输出一个临时预览地址(如 https://xxxx.astro-gyoza-61a.pages.dev),生产域名 zmy666.me 会自动切换到最新版本。

登录问题

如果 wrangler 提示未登录或令牌过期,先执行:

sh
pnpm exec wrangler login

浏览器会弹出 Cloudflare 授权页面,登录授权后会自动保存凭据。可以用以下命令验证登录状态:

sh
pnpm exec wrangler whoami

常见问题

问题原因与解决办法
构建时 sitemap 报错 Cannot read properties of undefined (reading 'reduce')@astrojs/sitemap 被升到了 3.7+,与 Astro 4.6 不兼容。把 package.json 中该依赖固定为 3.1.5,重新 pnpm install
提示 Ignored build scripts: workerd在 pnpm-workspace.yaml 的 allowBuilds 中把 workerd 设为 true,重新 pnpm install
部署时警告 working directory is a git repo and has uncommitted changes只是提醒,不影响部署,可忽略
部署成功后域名没有更新Cloudflare 缓存,等待一两分钟或强制刷新浏览器
忘记项目名执行 pnpm exec wrangler pages project list 查看已有项目

发布新文章后的完整流程

sh
pnpm install      # 1. 安装依赖(有新依赖时才需要)
pnpm build        # 2. 构建 + 生成搜索索引
pnpm deploy       # 3. 上传到 Cloudflare

文章标题:部署到 Cloudflare Pages(手动操作教程)

文章作者:zmy

文章链接:https://zmy666.me/posts/deploy-to-cloudflare[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。