Какую систему адаптеров использует SvelteKit для деплоя и как выбрать нужный адаптер?
SvelteKit адаптеры преобразуют нейтральный вывод сборки под конкретную платформу: adapter-node для Docker/VPS, adapter-static для статического хостинга, adapter-cloudflare для Edge/Workers, adapter-vercel/netlify для соответствующих платформ. Выбор задаётся в svelte.config.js.
Что такое адаптеры SvelteKit
Адаптер — плагин сборки, который преобразует вывод vite build в формат, понятный конкретной платформе деплоя. SvelteKit производит платформо-нейтральный вывод; адаптер затем упаковывает его для Node.js, Cloudflare Workers, Vercel, Netlify или статического хостинга.
Встроенные адаптеры
- @sveltejs/adapter-auto — автоопределение платформы (Vercel, Netlify, Cloudflare). Рекомендуется при деплое на поддерживаемые платформы.
- @sveltejs/adapter-node — создаёт standalone Node.js-сервер. Используется для Docker, VPS, любого Node-хостинга.
- @sveltejs/adapter-static — полная предрендеровка в статические HTML/JS/CSS. Требует
prerender = trueна всех страницах илиfallbackдля SPA. - @sveltejs/adapter-cloudflare — для Cloudflare Pages + Workers (Edge Runtime, Web Crypto API).
- @sveltejs/adapter-vercel — для Vercel (Edge Functions или Serverless).
- @sveltejs/adapter-netlify — для Netlify Functions.
Настройка adapter-node
// svelte.config.js
import adapter from '@sveltejs/adapter-node';
export default {
kit: {
adapter: adapter({
out: 'build', // выходная директория
precompress: true, // gzip + brotli для статики
envPrefix: 'MY_APP_', // PREFIX для env-переменных
})
}
};
После сборки запуск: node build/index.js. Порт задаётся через PORT env-переменную.
Настройка adapter-static (SPA-режим)
// svelte.config.js
import adapter from '@sveltejs/adapter-static';
export default {
kit: {
adapter: adapter({
pages: 'build',
assets: 'build',
fallback: '200.html', // SPA fallback для клиентского роутинга
precompress: false,
})
}
};
Для SPA нужно отключить SSR глобально:
// src/routes/+layout.js
export const ssr = false;
export const prerender = false;
Настройка adapter-cloudflare
// svelte.config.js
import adapter from '@sveltejs/adapter-cloudflare';
export default {
kit: {
adapter: adapter({
routes: {
include: ['/*'],
exclude: ['<all>']
}
})
}
};
Деплой: wrangler pages deploy build/. Привязки (KV, D1, R2) доступны через platform.env в серверных функциях.
Как выбрать адаптер
- Vercel/Netlify →
adapter-autoили платформенный адаптер. - Docker / VPS / Kubernetes →
adapter-node. - Документация / маркетинговый сайт без динамики →
adapter-static. - Edge (низкая латентность, глобальное распределение) →
adapter-cloudflare. - Ограниченный бюджет с serverless →
adapter-vercelс Edge Functions.
Подводные камни
adapter-autoв неизвестном окружении (например, Railway) падает при билде — нужно явно указать адаптер.adapter-staticнесовместим со страницами, использующими серверные функции (+server.ts,loadсserver-контекстом).- Edge-адаптеры не поддерживают Node.js API (fs, crypto, Buffer) — нужны Web API аналоги (
globalThis.crypto). - При
precompress: trueв adapter-node сервер сам не отдаёт brotli — нужен nginx или обёртка, которая проверяетAccept-Encoding. - Переменные окружения в adapter-static недоступны в runtime (только в build time через
$env/static/public). - Версии адаптеров должны совпадать с мажорной версией SvelteKit — смешение версий приводит к ошибкам типов.
- Cloudflare Workers имеют лимит на размер бандла (1 МБ для бесплатного плана) — тяжёлые зависимости могут не пройти.
Common mistakes
- Путать SvelteKit adapters с похожим API из соседнего фреймворка.
- Не объяснять, где код выполняется: сервер, клиент, build step или runtime.
- Игнорировать влияние на hydration, cache, bundle size или безопасность.
What the interviewer is testing
- Точно объясняет назначение механизма «SvelteKit adapters».
- Показывает корректный минимальный пример без выдуманных API.
- Называет ограничения, failure modes и production-компромиссы.