Перейти к содержимому

Cloudflare Workers

Для развёртывания на Cloudflare Workers с Workers Sites используйте adapter-cloudflare-workers.

Установите с помощью команды npm i -D @sveltejs/adapter-cloudflare-workers, затем добавьте адаптер в ваш файл svelte.config.js:

svelte.config.js
import adapter from '@sveltejs/adapter-cloudflare-workers';
export default {
kit: {
adapter: adapter({
// см. описание доступных параметров ниже
})
}
};

Путь к вашему конфигурационному файлу Wrangler. Если вы хотите использовать имя файла конфигурации Wrangler, отличное от wrangler.jsonc, wrangler.json или wrangler.toml, вы можете указать его с помощью этой опции.

Настройки для эмулируемых локальных привязок platform.env. Полный список опций см. в документации по API getPlatformProxy Wrangler.

Этот адаптер ожидает наличия конфигурационного файла Wrangler в корне проекта. Он должен выглядеть примерно так:

wrangler.jsonc
{
"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"
}

<your-service-name> может быть любым. <your-account-id> можно найти, выполнив команду wrangler whoami с помощью инструмента Wrangler CLI или войдя в вашу панель управления Cloudflare и взяв его из конца URL:

https://dash.cloudflare.com/<your-account-id>/home

Вам нужно установить Wrangler и войти в систему, если вы ещё этого не сделали:

Окно терминала
npm i -D wrangler
wrangler login

Затем вы можете собрать и развернуть свое приложение:

Окно терминала
wrangler deploy

Объект env содержит привязки вашего проекта, такие как пространства имён KV/DO и т. д. Он передаётся в SvelteKit через свойство platform вместе с ctx, caches и cf, что позволяет вам получать к нему доступ в хуках и эндпойнтах:

export async function POST({ request, platform }) {
const x = platform.env.YOUR_DURABLE_OBJECT_NAMESPACE.idFromName('x');
}

Чтобы сделать эти типы доступными для вашего приложения, установите @cloudflare/workers-types и укажите их в вашем файле src/app.d.ts:

src/app.d.ts
import { KVNamespace, DurableObjectNamespace } from '@cloudflare/workers-types';
declare global {
namespace App {
interface Platform {
env?: {
YOUR_KV_NAMESPACE: KVNamespace;
YOUR_DURABLE_OBJECT_NAMESPACE: DurableObjectNamespace;
};
}
}
}
export {};

Значения, специфичные для Cloudflare Workers, в свойстве platform эмулируются в режимах разработки и предпросмотра. Локальные привязки создаются на основе вашего конфигурационного файла Wrangler и используются для заполнения platform.env во время разработки и предпросмотра. Используйте опцию конфигурации адаптера platformProxy, чтобы изменить настройки для привязок.

Для тестирования сборки используйте Wrangler версии 4. После сборки сайта выполните команду wrangler dev.

Если вы хотите включить совместимость с Node.js, добавьте флаг совместимости nodejs_compat в ваш конфигурационный файл Wrangler:

wrangler.jsonc
{
"compatibility_flags": ["nodejs_compat"]
}

При развёртывании вашего приложения сервер, созданный SvelteKit, собирается в один файл. Wrangler не сможет опубликовать ваш воркер, если после минификации он превысит ограничения по размеру. Обычно вы вряд ли столкнётесь с этим ограничением, но некоторые крупные библиотеки могут его вызвать. В таком случае попробуйте уменьшить размер воркера, импортируя такие библиотеки только на стороне клиента. Подробности см. в FAQ.

В Cloudflare Workers нельзя использовать fs — необходимо предварительно рендерить соответствующие маршруты.