Создание адаптеров
Если адаптер для вашей предпочитаемой среды ещё не существует, вы можете создать свой собственный. Мы рекомендуем изучить исходный код адаптера для платформы, похожей на вашу, и использовать его в качестве отправной точки.
Пакеты адаптеров реализуют следующий API, который создаёт Adapter
:
/** @param {AdapterSpecificOptions} options */export default function (options) { /** @type {import('@sveltejs/kit').Adapter} */ const adapter = { name: 'adapter-package-name', async adapt(builder) { // adapter implementation }, async emulate() { return { async platform({ config, prerender }) { // возвращаемый объект становится `event.platform` во время разработки, сборки и // предпросмотра. Его структура соответствует типу `App.Platform` } } }, supports: { read: ({ config, route }) => { // Возвращает `true`, если маршрут с указанным `config` может использовать `read` // из `$app/server` в продакшене, возвращает `false`, если это невозможно. // Или выбрасывает описательную ошибку, объясняющую, как настроить развёртывание } } };
return adapter;}
Из них name
и adapt
являются обязательными. emulate
и supports
— необязательные.
В методе adapt
адаптер должен выполнять следующие действия:
- Очищать директорию сборки.
- Записывать выходные данные SvelteKit с помощью
builder.writeClient
,builder.writeServer
иbuilder.writePrerendered
. - Создавать код, который:
- Импортирует
Server
из${builder.getServerDirectory()}/index.js
. - Создаёт экземпляр приложения с манифестом, сгенерированным с помощью
builder.generateManifest({ relativePath })
. - Обрабатывает запросы от платформы, при необходимости преобразует их в стандартный
Request
, вызывает функциюserver.respond(request, { getClientAddress })
для созданияResponse
и отвечает с её помощью. - Предоставляет SvelteKit любую специфичную для платформы информацию через опцию
platform
, передаваемую вserver.respond
. - Глобально подменяет
fetch
для работы на целевой платформе, если это необходимо. SvelteKit предоставляет помощник@sveltejs/kit/node/polyfills
для платформ, которые могут использоватьundici
.
- Импортирует
- При необходимости собирает выходные данные в бандл, чтобы избежать установки зависимостей на целевой платформе.
- Размещает статические файлы пользователя и сгенерированные JS/CSS в правильном месте для целевой платформы.
По возможности мы рекомендуем размещать выходные данные адаптера в директории build/
, а любые промежуточные данные — в .svelte-kit/[adapter-name]
.