SvelteKit умеет пререндерить каждую страницу при сборке и записывать результат простыми файлами с помощью @sveltejs/adapter-static. Lobsite размещает эти файлы. Соберите проект со статическим адаптером, выполните npx lobsite, и сайт заработает по адресу *.lobsite.app с HTTPS. Эта страница — о полностью пререндеренных сайтах. Серверным маршрутам и form actions нужен хостинг, который запускает SvelteKit на сервере.
Как это работает
- Перейдите на статический адаптер и пререндерьте каждую страницу (см. ниже), затем выполните
npm run build. Сайт окажется вbuild/. - Выполните
npx lobsiteв проекте. Деплоитсяbuild/, а неstatic/или.svelte-kit/. Первый деплой не требует аккаунта и живёт 6 часов. - Сохраните сайт по ссылке для получения в бесплатном аккаунте. После этого
npm run build && npx lobsiteобновляет тот же адрес.
adapter-static и пререндеринг
// svelte.config.js
import adapter from "@sveltejs/adapter-static";
export default {
kit: { adapter: adapter() },
};
// src/routes/+layout.js
export const prerender = true;
prerender = trueв корневом layout заставляет каждую страницу рендериться при сборке. Если страницу нельзя пререндерить, сборка падает и называет её, так что ничего сломанного не задеплоится.fallback: "200.html"— для страниц, которые нельзя пререндерить: SvelteKit записывает оболочку200.html, а Lobsite отдаёт её для любого пути, который не является файлом, и такие страницы рендерятся в браузере. Пререндеренные страницы всё равно лучше для поисковиков и первой загрузки.trailingSlashможно оставить по умолчанию:/aboutзаписывается какabout.htmlи отдаётся по/about.
Что выполняется при сборке, а что не сможет работать
Функции load, включая те, что в +page.server.js, выполняются во время сборки, когда страница пререндерится, поэтому данные из файлов или API вшиваются в HTML. Динамические маршруты находятся по ссылкам с ваших страниц; те, на которые нет ссылок, перечислите в prerender.entries. Без сервера не заработают: form actions, эндпоинты +server.js, кроме пререндеренных GET, хуки, выполняемые на каждый запрос, и чтение cookie. Форму обратной связи отправляйте на /_lobsite/forms/contact вместо form action; см. формы.
Файлы хранятся по хешу. Повторный деплой неизменённого сайта загружает 0 байт.
Предпросмотр до публикации. Откат в один клик — вместе с перенаправлениями.
Каждый сайт получает адрес *.lobsite.app с HTTPS с первого деплоя.
Направьте форму на /_lobsite/forms/contact. Фильтр спама включён.
Перенаправления, заголовки и формы хранятся в lobsite.toml и переезжают с каждым деплоем.
Все лимиты опубликованы, а каждая ошибка подсказывает, что делать дальше.
Сравнение хостингов для SvelteKit
| Lobsite | Vercel | Netlify | Cloudflare Pages | |
|---|---|---|---|---|
Пререндеренные сайты (adapter-static) |
Да | Да | Да | Да |
| Серверный рендеринг, form actions | Нет | Да | Да | Да |
| Сборка на сервере | Нет: вы деплоите build/ |
Да | Да | Да |
| Аккаунт до первого деплоя | Нет: 6 часов онлайн, затем сохраните бесплатно | Да | Да | Да |
| Формы без бэкенда | Да, когда сайт в аккаунте | Нет | Да | Нет |
| Свой домен | Да, бесплатно | Да | Да | Да |
Если ваше приложение рендерит страницы по запросу, используйте адаптер для хостинга, который его запустит. Если каждую страницу можно пререндерить, как у маркетинговых сайтов, блогов и документации, Lobsite разместит её одной командой и загрузит только файлы, изменённые каждой сборкой.
Частые вопросы
Какой адаптер SvelteKit использовать для Lobsite?
@sveltejs/adapter-static с пререндерингом каждой страницы. adapter-auto и адаптеры платформ собирают под серверы и функции, которые Lobsite не запускает.
Заработает ли здесь SPA на SvelteKit с резервной страницей?
Да. Укажите adapter({ fallback: "200.html" }): Lobsite отдаёт 200.html со статусом 200 для любого пути, который не является файлом, а роутер SvelteKit рендерит страницу в браузере. Пререндеренные страницы по-прежнему отдаются как есть.
Почему сборка SvelteKit упала с ошибкой пререндеринга?
Страница не смогла отрендериться при сборке — часто потому, что читает url.searchParams, cookie или form action. Перенесите эту работу в браузер или в функцию load, которая использует только данные, доступные при сборке.
Работают ли переходы между страницами SvelteKit после пререндеринга?
Да. Пререндеренные страницы загружают клиент SvelteKit, который после первой страницы берёт навигацию на себя, так что ссылки по-прежнему меняют страницы без полной перезагрузки.