Skip to main content

Cloudflare Workers

要部署到 Cloudflare Workers,请使用 adapter-cloudflare-workers

除非您有特别原因使用 adapter-cloudflare-workers,否则建议使用 adapter-cloudflare。两个适配器具有相同的功能,但 Cloudflare Pages 提供了更多功能,如 GitHub 集成自动构建和部署、预览部署、即时回滚等。

使用方法

使用 npm i -D @sveltejs/adapter-cloudflare-workers 安装,然后将适配器添加到您的 svelte.config.js 中:

svelte.config
import import adapteradapter from '@sveltejs/adapter-cloudflare-workers';

export default {
	
kit: {
    adapter: any;
}
kit
: {
adapter: anyadapter: import adapteradapter({ config: stringconfig: 'wrangler.toml',
platformProxy: {
    configPath: string;
    environment: undefined;
    experimentalJsonConfig: boolean;
    persist: boolean;
}
platformProxy
: {
configPath: stringconfigPath: 'wrangler.toml', environment: undefinedenvironment: var undefinedundefined, experimentalJsonConfig: booleanexperimentalJsonConfig: false, persist: booleanpersist: false } }) } };

选项

config

自定义 wrangler.tomlwrangler.json 配置文件的路径。

platformProxy

模拟的 platform.env 本地绑定的首选项。完整的选项列表请参见 getPlatformProxy Wrangler API 文档。

基本配置

此适配器需要在项目根目录中找到 wrangler.toml/wrangler.json 文件。它应该看起来像这样:

wrangler
name = "<your-service-name>"
account_id = "<your-account-id>"

main = "./.cloudflare/worker.js"
site.bucket = "./.cloudflare/public"

build.command = "npm run build"

compatibility_date = "2021-11-12"
workers_dev = true

<your-service-name> 可以是任何名称。<your-account-id> 可以通过登录到您的 Cloudflare 仪表板 并从 URL 末尾获取:

https://dash.cloudflare.com/<your-account-id>

您应该将 .cloudflare 目录(或您为 mainsite.bucket 指定的任何目录)添加到 .gitignore 中。

如果您还没有安装 wrangler 并登录,需要先执行这些操作:

npm i -g wrangler
wrangler login

然后,您可以构建并部署您的应用:

wrangler deploy

自定义配置

如果您想使用 wrangler.toml 以外的配置文件,可以使用 config 选项 指定。

如果您想启用 Node.js 兼容性,可以在 wrangler.toml 中添加 “nodejs_compat” 标志:

wrangler
compatibility_flags = [ "nodejs_compat" ]

运行时 API

env 对象包含您项目的 绑定,包括 KV/DO 命名空间等。它通过 platform 属性传递给 SvelteKit,同时还包括 contextcachescf,这意味着您可以在 hooks 和端点中访问它:

export async function 
function POST({ request, platform }: {
    request: any;
    platform: any;
}): Promise<void>
POST
({ request, platform }) {
const const x: anyx = platform: anyplatform.env.YOUR_DURABLE_OBJECT_NAMESPACE.idFromName('x'); }

对于环境变量,应优先使用 SvelteKit 内置的 $env 模块。

要包含绑定的类型声明,请在您的 src/app.d.ts 中引用它们:

src/app.d
import { interface KVNamespace<Key extends string = string>KVNamespace, interface DurableObjectNamespace<T extends Rpc.DurableObjectBranded | undefined = undefined>DurableObjectNamespace } from '@cloudflare/workers-types';

declare global {
	namespace App {
		interface interface App.Platform

If your adapter provides platform-specific context via event.platform, you can specify it here.

Platform
{
App.Platform.env?: {
    YOUR_KV_NAMESPACE: KVNamespace;
    YOUR_DURABLE_OBJECT_NAMESPACE: DurableObjectNamespace;
} | undefined
env
?: {
type YOUR_KV_NAMESPACE: KVNamespace<string>YOUR_KV_NAMESPACE: interface KVNamespace<Key extends string = string>KVNamespace; type YOUR_DURABLE_OBJECT_NAMESPACE: DurableObjectNamespace<undefined>YOUR_DURABLE_OBJECT_NAMESPACE: interface DurableObjectNamespace<T extends Rpc.DurableObjectBranded | undefined = undefined>DurableObjectNamespace; }; } } } export {};

本地测试

在开发和预览模式下,platform 属性中的 Cloudflare Workers 特定值会被模拟。本地 绑定 是基于您的 wrangler.toml 文件中的配置创建的,并在开发和预览期间用于填充 platform.env。使用适配器配置的 platformProxy 选项 可以更改绑定的首选项。

要测试构建,您应该使用 wrangler 版本 3。构建完网站后,运行 wrangler dev

故障排除

Worker 大小限制

在部署到 workers 时,SvelteKit 生成的服务端会被打包成单个文件。如果您的 worker 在压缩后超过了 大小限制,Wrangler 将无法发布。通常您不太可能遇到这个限制,但某些大型库可能会导致这种情况。在这种情况下,您可以尝试通过仅在客户端导入这些库来减小 worker 的大小。更多信息请参见 FAQ

访问文件系统

您不能在 Cloudflare Workers 中使用 fs — 您必须 预渲染 相关路由。

在 GitHub 编辑此页面

上一页 下一页