Создание адаптеров
Если адаптер для вашей предпочитаемой среды ещё не существует, вы можете создать свой собственный. Мы рекомендуем изучить исходный код адаптера для платформы, похожей на вашу, и использовать его в качестве отправной точки.
Пакеты адаптеров реализуют следующий 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].