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 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.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: anyx = platform: anyplatform.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.PlatformIf 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;
} | undefinedenv?: {
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 — 您必须 预渲染 相关路由。