技术预览提交反馈

Cloudflare

更新于 2026年11月12日

Cloudflare Workers 可以直接提供静态资源目录:无需额外的计算资源,也无需 SPA 垫片。livemark.dev 就是这样发布的,同样结构的 wrangler.jsonc 适用于任何 Livemark 站点。

构建站点

livemark build

输出位于 .livemark/build/client/。

配置 wrangler.jsonc

将以下内容放到项目根目录:

wrangler.jsonc
{
  "name": "my-docs",
  "compatibility_date": "2026-04-01",
  "workers_dev": true,
  "assets": {
    "directory": ".livemark/build/client",
  },
}

关键在于两个字段:

字段作用
assets.directory让 Wrangler 指向 Livemark 的构建输出。每个文件都按原样提供。
workers_dev测试期间为你提供一个 <name>.<account>.workers.dev 预览 URL。

从本机部署

livemark build
wrangler deploy

首次运行时会提示你执行 wrangler login,以授权访问你的 Cloudflare 账户。

使用 GitHub Actions 部署

.github/workflows/deploy.yaml
name: deploy

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: pnpm/action-setup@v4
      - uses: actions/setup-node@v4
        with:
          cache: pnpm
          node-version: 24
      - run: pnpm install
      - run: pnpm livemark build
      - uses: cloudflare/wrangler-action@v3
        with:
          apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
          accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}

在 My Profile → API Tokens 中创建一个限定权限的 API 令牌(“Edit Cloudflare Workers” 模板恰好授予所需权限),并将这两个值保存为仓库密钥。

自定义域名

当你的域名区域(zone)托管在 Cloudflare 上后,添加一个 routes 块:

wrangler.jsonc
{
  "name": "my-docs",
  "compatibility_date": "2026-04-01",
  "assets": { "directory": ".livemark/build/client" },
  "routes": [{ "pattern": "docs.example.com", "custom_domain": true }],
}

custom_domain: true 会让 Cloudflare 配置一个托管域名:DNS、证书和路由都会自动处理。在 livemark.config.ts 中将 site 设置为同一域名,使 sitemap 和 RSS 订阅源中的绝对 URL 保持一致。

面向智能体的 Markdown

AI 智能体通过发送 Accept: text/markdown 来请求页面的 Markdown 版本。静态资源总是返回 HTML,因此需要在你的域名区域中添加一条 URL Rewrite Rule,把这类请求指向页面的 Markdown 副本。URL Rewrite Rules 在所有套餐(包括免费套餐)中均可用,站点也依然保持完全静态。

在控制台中打开你的域名,进入 Rules → Overview → Create rule → URL Rewrite Rule,然后填写:

字段值
Rule nameMarkdown for agents
If incoming requests matchCustom filter expression(见下)
PathRewrite to → Dynamic → concat(http.request.uri.path, "index.md")
QueryPreserve
Filter expression
any(http.request.headers["accept"][*] contains "text/markdown") and ends_with(http.request.uri.path, "/")

页面 URL 以 / 结尾,因此该规则只作用于页面。对 /guide 的请求会先被重定向到 /guide/,然后再被重写。静态资源会以 text/markdown 类型提供 .md 文件,因此响应类型无需额外规则。

另请参阅

用 ❤ 和 Livemark 构建