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
中:
import import adapter
adapter from '@sveltejs/adapter-cloudflare-workers';
export default {
kit: {
adapter: any;
}
kit: {
adapter: any
adapter: import adapter
adapter({
config: string
config: 'wrangler.toml',
platformProxy: {
configPath: string;
environment: undefined;
experimentalJsonConfig: boolean;
persist: boolean;
}
platformProxy: {
configPath: string
configPath: 'wrangler.toml',
environment: undefined
environment: var undefined
undefined,
experimentalJsonConfig: boolean
experimentalJsonConfig: false,
persist: boolean
persist: false
}
})
}
};
选项
config
自定义 wrangler.toml
或 wrangler.json
配置文件的路径。
platformProxy
模拟的 platform.env
本地绑定的首选项。完整的选项列表请参见 getPlatformProxy Wrangler API 文档。
基本配置
此适配器需要在项目根目录中找到 wrangler.toml/wrangler.json 文件。它应该看起来像这样:
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
目录(或您为main
和site.bucket
指定的任何目录)添加到.gitignore
中。
如果您还没有安装 wrangler 并登录,需要先执行这些操作:
npm i -g wrangler
wrangler login
然后,您可以构建并部署您的应用:
wrangler deploy
自定义配置
如果您想使用 wrangler.toml
以外的配置文件,可以使用 config
选项 指定。
如果您想启用 Node.js 兼容性,可以在 wrangler.toml
中添加 “nodejs_compat” 标志:
compatibility_flags = [ "nodejs_compat" ]
运行时 API
env
对象包含您项目的 绑定,包括 KV/DO 命名空间等。它通过 platform
属性传递给 SvelteKit,同时还包括 context
、caches
和 cf
,这意味着您可以在 hooks 和端点中访问它:
export async function function POST({ request, platform }: {
request: any;
platform: any;
}): Promise<void>
POST({ request, platform }) {
const const x: any
x = platform: any
platform.env.YOUR_DURABLE_OBJECT_NAMESPACE.idFromName('x');
}
对于环境变量,应优先使用 SvelteKit 内置的
$env
模块。
要包含绑定的类型声明,请在您的 src/app.d.ts
中引用它们:
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
— 您必须 预渲染 相关路由。