Cloudflare
Cloudflare Workers
预设: cloudflare_module
2024-09-19 或更晚。以下展示了用于将 Nitro 应用部署到 Cloudflare Workers 的示例 nitro.config.ts 文件。
import { defineNitroConfig } from "nitro/config";
export default defineNitroConfig({
compatibilityDate: "2024-09-19",
preset: "cloudflare_module",
cloudflare: {
deployConfig: true,
nodeCompat: true
}
})
通过设置 deployConfig: true,Nitro 将自动为你生成具有正确配置的 wrangler.json。
如果你需要添加 Cloudflare Workers 配置,例如 绑定,你可以:
- 在 Nitro 配置的
cloudflare: { wrangler : {} }下设置这些。这与wrangler.json具有相同的类型。 - 提供你自己的
wrangler.json。Nitro 会将你的配置与适当的设置合并,包括指向构建输出。
本地预览
你可以使用 Wrangler 在本地预览你的应用:
npm run build
yarn build
pnpm build
bun run build
deno run build
npx wrangler dev
yarn dlx wrangler dev
pnpm dlx wrangler dev
bunx wrangler dev
deno run -A npm:wrangler dev
手动部署
构建完应用后,你可以使用 Wrangler 手动部署它。
首先确保你已登录到你的 Cloudflare 账户:
npx wrangler login
yarn dlx wrangler login
pnpm dlx wrangler login
bunx wrangler login
deno run -A npm:wrangler login
然后你可以使用以下命令部署应用:
npx wrangler deploy
yarn dlx wrangler deploy
pnpm dlx wrangler deploy
bunx wrangler deploy
deno run -A npm:wrangler deploy
运行时钩子
你可以使用下面的运行时钩子来扩展 Worker 处理器。
额外导出
你可以在项目根目录添加一个 exports.cloudflare.ts 文件,以向 Cloudflare Worker 入口点导出额外的处理器或属性。
export class MyWorkflow extends WorkflowEntrypoint {
async run(event: WorkflowEvent, step: WorkflowStep) {
// ...
}
}
Nitro 将自动检测此文件并将其导出包含在最终构建中。
exports.cloudflare.ts 文件不能包含默认导出。你还可以使用 nitro.config.ts 中的 cloudflare.exports 选项来自定义入口点文件位置:
export default defineConfig({
cloudflare: {
exports: "custom-exports-entry.ts"
}
})
定时任务(Cron 触发器)
当使用带有 scheduledTasks 的 Nitro 任务时,Nitro 会在构建时自动在 wrangler 配置中生成 Cron 触发器。
import { defineNitroConfig } from "nitro/config";
export default defineNitroConfig({
preset: "cloudflare_module",
experimental: {
tasks: true,
},
scheduledTasks: {
"* * * * *": ["cms:update"],
"0 15 1 * *": ["db:cleanup"],
},
cloudflare: {
deployConfig: true,
},
})
无需手动配置 Wrangler - Nitro 会为你处理。
Cloudflare Pages
预设: cloudflare_pages
以下展示了用于将 Nitro 应用部署到 Cloudflare Pages 的示例 nitro.config.ts 文件。
import { defineNitroConfig } from "nitro/config";
export default defineNitroConfig({
preset: "cloudflare_pages",
cloudflare: {
deployConfig: true,
nodeCompat:true
}
})
Nitro 自动生成一个 _routes.json 文件,用于控制哪些路由由文件提供,哪些由 Worker 脚本提供。自动生成的路由文件可以通过配置选项 cloudflare.pages.routes 覆盖(了解更多)。
本地预览
你可以使用 Wrangler 在本地预览你的应用:
npm run build
yarn build
pnpm build
bun run build
deno run build
npx wrangler pages dev
yarn dlx wrangler pages dev
pnpm dlx wrangler pages dev
bunx wrangler pages dev
deno run -A npm:wrangler pages dev
手动部署
构建完应用后,你可以使用 Wrangler 手动部署它,为此首先确保你已登录到你的 Cloudflare 账户:
npx wrangler login
yarn dlx wrangler login
pnpm dlx wrangler login
bunx wrangler login
deno run -A npm:wrangler login
然后你可以使用以下命令部署应用:
npx wrangler pages deploy
yarn dlx wrangler pages deploy
pnpm dlx wrangler pages deploy
bunx wrangler pages deploy
deno run -A npm:wrangler pages deploy
使用 GitHub Actions 在 CI/CD 中部署
无论你使用的是 Cloudflare Pages 还是 Cloudflare Workers,都可以使用 Wrangler GitHub Actions 来部署你的应用。
cloudflare_pages)。环境变量
Nitro 允许你使用 process.env 或 import.meta.env 或运行时配置来统一访问环境变量。
示例: 如果你已设置 SECRET 和 NITRO_HELLO_THERE 环境变量,你可以通过以下方式访问它们:
import { defineHandler } from "nitro";
import { useRuntimeConfig } from "nitro/runtime-config";
console.log(process.env.SECRET) // 注意这是在全局作用域中!所以它实际上不起作用,变量是未定义的!
export default defineHandler((event) => {
// 注意以下都是访问上述变量的有效方式
useRuntimeConfig().helloThere
useRuntimeConfig().secret
process.env.NITRO_HELLO_THERE
import.meta.env.SECRET
});
在开发模式中指定变量
对于开发,你可以使用 .env 或 .env.local 文件来指定环境变量:
NITRO_HELLO_THERE="captain"
SECRET="top-secret"
.env 和 .env.local 添加到 .gitignore 文件中,这样你就不会提交它,因为它可能包含敏感信息。为本地预览指定变量
构建后,当你使用 wrangler dev 或 wrangler pages dev 在本地试用项目时,为了能够访问环境变量,你需要在项目根目录的 .dev.vars 文件中指定它们(如 Pages 和 Workers 文档中所述)。
如果你在开发时使用 .env 或 .env.local 文件,你的 .dev.vars 应该与之一致。
.dev.vars 添加到 .gitignore 文件中,这样你就不会提交它,因为它可能包含敏感信息。为生产环境指定变量
对于生产环境,请使用 Cloudflare 仪表板或 wrangler secret 命令来设置环境变量和密钥。
使用 wrangler.toml/wrangler.json 指定变量
你可以指定自定义的 wrangler.toml/wrangler.json 文件并在其中定义变量。
示例:
# 共享
[vars]
NITRO_HELLO_THERE="general"
SECRET="secret"
# 为 `--env production` 用法覆盖值
[env.production.vars]
NITRO_HELLO_THERE="captain"
SECRET="top-secret"
{
"vars": {
"NITRO_HELLO_THERE": "general",
"SECRET": "secret"
},
"env": {
"production": {
"vars": {
"NITRO_HELLO_THERE": "captain",
"SECRET": "top-secret"
}
}
}
}
直接访问 Cloudflare 绑定
绑定允许你与 Cloudflare 平台的资源进行交互,此类资源的例子包括键值数据存储(KVs)和无服务器 SQL 数据库(D1s)。
在运行时,你可以通过 event.req.runtime.cloudflare.env 从请求事件中访问绑定。例如,以下是你如何访问 D1 绑定的方式:
import { defineHandler } from "nitro";
defineHandler(async (event) => {
const { env } = event.req.runtime.cloudflare
const stmt = await env.MY_D1.prepare('SELECT id FROM table')
const { results } = await stmt.all()
})
在本地开发中访问绑定
要在开发模式中访问绑定,我们首先定义它们。你可以在 wrangler.jsonc/wrangler.json/wrangler.toml 文件中执行此操作
例如,要在 wrangler.toml 中定义变量和 KV 命名空间:
[vars]
MY_VARIABLE="my-value"
[[kv_namespaces]]
binding = "MY_KV"
id = "xxx"
{
"vars": {
"MY_VARIABLE": "my-value",
},
"kv_namespaces": [
{
"binding": "MY_KV",
"id": "xxx"
}
]
}
接下来我们安装所需的 wrangler 包(如果尚未安装):
npm i wrangler -D
yarn add wrangler -D
pnpm i wrangler -D
bun i wrangler -D
deno i npm:wrangler -D
从此时起,当运行
npm run dev
yarn dev
pnpm dev
bun run dev
deno run dev
你将能够像上图所示那样从请求事件中访问 MY_VARIABLE 和 MY_KV。
Wrangler 环境
如果你有多个 Wrangler 环境,你可以指定在 Cloudflare 开发模拟期间使用哪个 Wrangler 环境:
import { defineNitroConfig } from "nitro/config";
export default defineNitroConfig({
preset: 'cloudflare_module',
cloudflare: {
dev: {
environment: 'preview'
}
}
})