Communitygithub.com

vanilla-site-cloudflare

构建并部署无框架静态站点(原生 HTML/CSS/JS)到 Cloudflare Pages,支持 GitHub 自动部署、缓存清除、部署后自动重载和安全头部。

vanilla-site-cloudflare 是什么?

这是一个专为开发者设计的 AI 辅助技能,用于在 Cloudflare Pages 上构建和部署纯静态网站。它采用原生 HTML/CSS/JS,无需构建步骤,通过 GitHub 自动部署到 main 分支即可完成发布。该技能解决了难以追踪的缓存问题(包括“no se ve”陈旧缓存),通过自动缓存清除和部署后自动重载机制实现。它支持 Cloudflare Pages、其他 Pages 风格平台以及 Supabase 后端(通过 /functions 目录)。使用该技能可简化工作流,避免工具链冲突,只需遵循可靠的部署仪式,并在生产部署前验证内联 JavaScript 编译。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Mreboredo/skills-cobros-argentina/tree/HEAD/vanilla-site-cloudflare

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Cloudflare Pages 上的原生静态网站

无需构建步骤。编辑文件 → 推送到 main → Cloudflare Pages 自动部署。快速、廉价,且无需与工具链纠缠。

为什么选择原生(决策理由)

  • 零构建/CI 开销;修复两行代码只需 30 秒部署。
  • 无框架锁定或重构税。原则是“添加,而非重写”。
  • 整个站点可搜索、可调试、清晰明了。
  • 妥协之处:需要更多手动 DOM 代码。但在中小规模场景下值得。

仓库 + 部署

  • 一个 GitHub 仓库 → Cloudflare Pages 项目,推送至 main 分支时自动部署。
  • Pages 提供仓库根目录内容。美化 URL:/mi-cuenta.html 在 /mi-cuenta 路径下访问。
  • 函数(无服务器)位于 /functions 目录(参见 supabase-backend)。

部署仪式(每次部署都要执行)

  1. 编辑文件。
  2. 验证 JS 编译——绝不要推送损坏的内联 JS。提取内联 <script> 块并对每个块运行 vm.compileFunction;对于 .js/.cjs 文件使用 node --check。参见 reference/verify-inline.cjs。
  3. 缓存清除资源:node .claude/cache-bust.cjs —— 在 HTML 中每个 assets/**/*.css|js 引用后添加 ?v=<git-short-hash>,并写入 version.json。参见 reference/cache-bust.cjs。
  4. 升级版本戳(单一来源,位于一个 JS 文件中,在页脚中低调显示)并记录日志。版本管理方案参见 project-continuity。
  5. 提交(使用项目语言,描述性提交信息)并包含合著作者声明,推送至 main。
  6. 验证上线:curl 已部署的资源,确认新的版本戳以及 version.json 与资源 ?v= 参数匹配(它们必须一致,否则自动重载会陷入循环)。Cloudflare 机器人保护会阻止普通爬虫 → 使用浏览器 User-Agent。

.claude/ 通常被 gitignore,因此缓存清除/验证脚本保留在本地(它们在构建时在你的机器上运行,而非在仓库中)。

缓存清除 + 自动重载(消除“no se ve”电话游戏)

两层机制,均在 reference/ 中:

  1. cache-bust.cjs —— 每次部署时重新在所有资源引用后添加 ?v=<git hash>,使浏览器重新获取变更的 CSS/JS,同时写入 version.json = {"v":"<hash>"}。
  2. 自动重载器(reference/auto-reload.js)—— 一个微型脚本,包含在每个页面中,读取自身加载时的 ?v=,轮询 /version.json(以 no-store 模式提供),当检测到新部署时:在标签页返回时重载(安全时机),在用户正在浏览时显示一次点击“Actualizar”横幅,并且绝不中断正在进行的输入(通过 window.__noAutoReload 选择退出,适用于考试/结账流程)。引导注意: 首次使用时,用户需硬刷新一次以加载重载器;之后自动生效。

通过 _headers 提供新鲜标记:

/version.json
  Cache-Control: no-store, max-age=0

安全头部(仓库根目录下的 _headers)

始终设置:Content-Security-Policy(将 script-src/frame-src/connect-src 锁定到确切的 CDN 加上你的 Supabase URL 加上 wss 用于实时通信)、X-Frame-Options: DENY、X-Content-Type-Options: nosniff、Referrer-Policy: strict-origin-when-cross-origin、Permissions-Policy、Strict-Transport-Security。已遇到的陷阱:嵌入视频 iframe 时,需要在 frame-src 中添加播放器域名,否则浏览器会静默阻止。

可复用 CSS 约定

  • 基于 CSS 变量的令牌主题系统;通过 data-theme="dark" 重新映射和共享的 localStorage 键实现主题在页面/标签间同步。
  • 深色模式:仅通过颜色对比是不够的——你还需要可见的层级结构(背景 < 表面 < 卡片),使用浅色步进和阴影,否则会显得平淡。
  • 切勿硬编码 white/颜色;使用令牌,使主题能够响应。
  • 不破坏全局的 .btn/.btn-primary;在作用域内覆盖。

本技能包含的文件

  • reference/cache-bust.cjs —— 资源标记 + version.json 写入器。
  • reference/auto-reload.js —— 部署自动重载器(放入全局加载的 JS 文件中)。
  • reference/verify-inline.cjs —— 部署前编译检查内联 <script> 块。
  • reference/headers-example —— 初始 _headers 配置示例。

相关技能