跳至主要内容

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.toml 配置文件的路径。

platformProxy

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

基本配置

此适配器期望在项目根目录中找到一个 wrangler.toml 文件。它应该如下所示

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 兼容性,您可以将“nodejs_compat”标志添加到 wrangler.toml 中。

wrangler
compatibility_flags = [ "nodejs_compat" ]

运行时 API

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

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 生成的服务器将捆绑到单个文件中。如果在缩小后超过 大小限制,Wrangler 将无法发布您的 Worker。通常您不太可能遇到此限制,但某些大型库可能会导致这种情况发生。在这种情况下,您可以尝试通过仅在客户端导入这些库来减小 Worker 的大小。有关更多信息,请参阅 常见问题解答

访问文件系统

您无法在 Cloudflare Workers 中使用 fs — 您必须 预渲染 有问题的路由。

在 GitHub 上编辑此页面

上一页 下一页