跳至主要内容

构建并部署

Cloudflare Workers

在 GitHub 上编辑此页面

要部署到 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.js
ts
import adapter from '@sveltejs/adapter-cloudflare-workers';
Cannot find module '@sveltejs/adapter-cloudflare-workers' or its corresponding type declarations.2307Cannot find module '@sveltejs/adapter-cloudflare-workers' or its corresponding type declarations.
export default {
kit: {
adapter: adapter({
config: '<your-wrangler-name>.toml',
platformProxy: {
persist: './your-custom-path'
}
})
}
};

选项

config

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

platformProxy

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

基本配置

此适配器希望在项目根目录中找到一个 wrangler.toml 文件。它应该看起来像这样

wrangler.toml
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.toml
compatibility_flags = [ "nodejs_compat" ]

运行时 API

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

ts
export async function POST({ request, platform }) {
Binding element 'request' implicitly has an 'any' type.
Binding element 'platform' implicitly has an 'any' type.
7031
7031
Binding element 'request' implicitly has an 'any' type.
Binding element 'platform' implicitly has an 'any' type.
const x = platform.env.YOUR_DURABLE_OBJECT_NAMESPACE.idFromName('x');
}

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

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

src/app.d.ts
declare global {
	namespace App {
		interface Platform {
			env?: {
				YOUR_KV_NAMESPACE: KVNamespace;
				YOUR_DURABLE_OBJECT_NAMESPACE: DurableObjectNamespace;
			};
		}
	}
}

export {};

本地测试

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

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

故障排除

工作线程大小限制

在部署到工作线程时,SvelteKit 生成的服务器会打包到一个文件中。如果在缩小后超过 大小限制,Wrangler 将无法发布你的工作线程。通常情况下,你不太可能达到此限制,但某些大型库可能会导致这种情况发生。在这种情况下,你可以尝试仅在客户端导入此类库来减小工作线程的大小。有关更多信息,请参阅 常见问题解答

访问文件系统

你无法在 Cloudflare 工作线程中使用 fs — 你必须 预渲染相关路由。

下一个 Netlify