跳至主要内容

构建和部署

Cloudflare Pages

在 GitHub 上编辑此页面

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

当你使用 adapter-auto 时,此适配器将默认安装。如果你计划继续使用 Cloudflare Pages,你可以从 adapter-auto 切换到直接使用此适配器,以便在本地开发期间模拟特定于 Cloudflare Workers 的值,自动应用类型声明,并提供设置特定于 Cloudflare 的选项的能力。

比较

  • adapter-cloudflare – 支持所有 SvelteKit 功能;为 Cloudflare Pages 构建
  • adapter-cloudflare-workers – 支持所有 SvelteKit 功能;为 Cloudflare Workers 构建
  • adapter-static – 仅生成客户端静态资产;与 Cloudflare Pages 兼容

用法

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

svelte.config.js
ts
import adapter from '@sveltejs/adapter-cloudflare';
Cannot find module '@sveltejs/adapter-cloudflare' or its corresponding type declarations.2307Cannot find module '@sveltejs/adapter-cloudflare' or its corresponding type declarations.
export default {
kit: {
adapter: adapter({
// See below for an explanation of these options
routes: {
include: ['/*'],
exclude: ['<all>']
},
platformProxy: {
persist: './your-custom-path'
}
})
}
};

选项

routes

允许您自定义由 adapter-cloudflare 生成的 _routes.json 文件。

  • include 定义将调用函数的路由,默认为 ['/*']
  • exclude 定义不会调用函数的路由 — 这是提供应用程序静态资源的更快速、更便宜的方式。此数组可以包含以下特殊值
    • <build> 包含应用程序的构建工件(由 Vite 生成的文件)
    • <files> 包含 static 目录的内容
    • <prerendered> 包含预渲染页面的列表
    • <all>(默认值)包含以上所有内容

您可以最多有 100 个 includeexclude 规则组合。通常您可以省略 routes 选项,但是如果(例如)您的 <prerendered> 路径超过该限制,您可能会发现手动创建包含 '/articles/*' 而不是自动生成的 ['/articles/foo', '/articles/bar', '/articles/baz', ...]exclude 列表很有用。

platformProxy

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

部署

请遵循 Cloudflare Pages 入门指南 开始。

配置项目设置时,您必须使用以下设置

  • 框架预设 – SvelteKit
  • 构建命令npm run buildvite build
  • 构建输出目录.svelte-kit/cloudflare

运行时 API

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

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 pages dev .svelte-kit/cloudflare

备注

项目根目录下的 /functions 目录中包含的函数不会包含在部署中,该部署编译为 单个 _worker.js 文件。函数应在 SvelteKit 应用中作为 服务器端点 实现。

特定于 Cloudflare Pages 的 _headers_redirects 文件可用于静态资产响应(如图像),方法是将它们放入 /static 文件夹中。

但是,它们不会对 SvelteKit 动态呈现的响应产生任何影响,SvelteKit 应从 服务器端点 或使用 handle 钩子返回自定义标头或重定向响应。

故障排除

延伸阅读

你可能希望参考 Cloudflare 关于部署 SvelteKit 网站的文档

访问文件系统

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