Cloudflare

将 Nitro 应用程序部署到 CloudFlare。

Cloudflare Workers

预设: cloudflare (switch to this preset)

**注意:**此预设使用 service-worker 语法 进行部署。

请注意: 无法通过 Cloudflare 的环境变量更新 runtimeConfig(有关更多信息,请参见 #272)。 作为解决方法,您可以在代码中使用 Cloudflare 环境变量作为常量。

登录您的 Cloudflare Workers 帐户并从侧边栏获取您的account_id

在您的根目录中创建一个 wrangler.toml

ini
name = "playground"
main = "./.output/server/index.mjs"
workers_dev = true
compatibility_date = "2022-09-10"
account_id = "<the account_id you obtained (optional)>"
route = "<mainly useful when you want to setup custom domains (optional too)>"

[site]
bucket = ".output/public"

Testing locally

您可以使用 wrangler2 在本地测试您的应用:

bash
NITRO_PRESET=cloudflare yarn build

# 如果您在项目的根目录中添加了一个像上面一样的“wrangler.toml”文件:
npx wrangler dev --local

# 如果你没有 'wrangler.toml',直接使用:
npx wrangler dev .output/server/index.mjs --site .output/public --local

Deploy from your local machine using wrangler

安装 wrangler2 并登录您的 Cloudflare 帐户:

bash
npm i wrangler -g
wrangler login

使用 cloudflare 预设生成网站:

bash
NITRO_PRESET=cloudflare yarn build

您可以在本地预览:

bash
# 如果你有一个像上面那样的 'wrangler.toml':
wrangler dev

# 如果你没有 'wrangler.toml':
wrangler dev .output/server/index.mjs --site .output/public

发布:

bash
wrangler publish

Deploy within CI/CD using GitHub Actions

根据 the wrangler action docs 创建令牌,并在 GitHub 上的存储库配置中设置CF_API_TOKEN

创建 .github/workflows/cloudflare.yml

yaml
name: cloudflare

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

jobs:
  ci:
    runs-on: ${{ matrix.os }}

    strategy:
      matrix:
        os: [ubuntu-latest]
        node: [14]

    steps:
      - uses: actions/setup-node@v1
        with:
          node-version: ${{ matrix.node }}

      - name: Checkout
        uses: actions/checkout@master

      - name: Cache node_modules
        uses: actions/cache@v2
        with:
          path: node_modules
          key: ${{ matrix.os }}-node-v${{ matrix.node }}-deps-${{ hashFiles(format('{0}{1}', github.workspace, '/yarn.lock')) }}

      - name: Install Dependencies
        if: steps.cache.outputs.cache-hit != 'true'
        run: yarn

      - name: Build
        run: yarn build
        env:
          NITRO_PRESET: cloudflare

      - name: Publish to Cloudflare
        uses: cloudflare/wrangler-action@2.0.0
        with:
          apiToken: ${{ secrets.CF_API_TOKEN }}

Cloudflare Pages

预设: cloudflare_pages (switch to this preset)

**注意:**这是一个实验性预设。

零配置供应商
可以通过零配置与此提供程序集成。 (了解更多

Git integration

如果您将 GitHub/GitLab 集成 与 Pages 一起使用,Nitro 不需要任何配置。 当您推送到存储库时,Pages 会自动构建您的项目,而 Nitro 会检测环境。

Direct Upload

或者,您可以使用 wrangler 将您的项目上传到 Cloudflare。 在这种情况下,您必须手动设置预设:

Deploy from your local machine using wrangler

安装 wrangler 并登录您的 Cloudflare 帐户:

bash
npm i wrangler -g
wrangler login

创建项目:

bash
wrangler pages project create <project-name>

发布:

bash
wrangler pages publish

Cloudflare Module Workers

预设: cloudflare-module (switch to this preset)

**注意:**这是一个实验性预设。

**注意:**此预设使用 模块语法 进行部署。

模块语法允许您使用 Durable ObjectsD1waitUntil。 您可以通过“event.context.cloudflare”访问模块绑定和上下文。

例如,在您的 wrangler.toml 中添加以下内容:

ini
services = [
  { binding = "WORKER", service = "<service name>" }
]
d1_databases = [
  { binding = "D1", database_id = "<database id>" }
]

Using waitUntil

waitUntil 允许在不阻塞事件的情况下进行缓存写入、外部日志记录等。

ts
// waitUntil 允许在不阻塞事件的情况下进行缓存写入、外部日志记录等
const { cloudflare } = event.context
cloudflare.context.waitUntil(logRequest(event.node.req))

Access env and bindings

js
const { cloudflare } = event.context
const res = await cloudflare.env.WORKER.fetch('<worker URL>')

D1 usage

ts
const { cloudflare } = event.context
const stmt = await cloudflare.env.D1.prepare('SELECT id FROM table')
const { results } = await stmt.all()