РекомендуетсяSvelteKit 2/3Svelte

SvelteKit: файлы маршрутов и контекст запроса

Используйте специальные имена файлов SvelteKit по назначению: UI, универсальная загрузка, серверная загрузка и HTTP handler. Версию и aliases фиксируйте до генерации структуры; серверное состояние пользователя не храните в общем модуле.

Опубликовано Проверено Изменено

Плохо

src/routes/orders/page.ts             ожидается автоматический маршрут
src/lib/current-user.ts              mutable singleton текущего пользователя
+page.ts импортирует БД
В одном приложении смешаны конфигурация/aliases SvelteKit 2 и 3.

Хорошо

src/routes/orders/+page.svelte        интерфейс /orders
src/routes/orders/+page.server.ts     серверная загрузка и допустимые actions
src/routes/api/orders/+server.ts      обработчики HTTP API
src/routes/+layout.svelte             общий layout
src/lib/components/OrderCard.svelte   повторно используемый UI
src/lib/server/orders.ts             серверная работа с данными
src/hooks.server.ts                  серверная подготовка request context
Сессия -> request locals -> ограниченные данные конкретного ответа.

Почему это важно

Файловый роутер распознает определенные имена, а универсальный load может выполняться на клиенте. Изменяемое состояние на уровне серверного модуля может пережить запрос и смешать пользователей.

Когда применять

Файловый роутинг SvelteKit 2/3; пример показывает общие пути без version-specific imports. Зафиксируйте major и поддерживаемые версии Svelte/Vite/Node/adapter в приложении. В SvelteKit 2 стандартный alias — $lib, в SvelteKit 3 используется #lib через package imports; конфигурация и генерируемые типы также проверяются по migration guide. Не объявляйте один bootstrap универсальным.

+page.svelte и +layout.svelte содержат UI. +page.ts/+layout.ts — universal load; +page.server.ts/+layout.server.ts выполняют серверную загрузку. +server.ts экспортирует HTTP handlers, а не страницу. Form actions помещаются в server page по их контракту; API и action не дублируют одну бизнес-операцию несогласованно.

Имена собственных компонентов выбираются PascalCase, функций — по принятому JS/TS-профилю. Runes в Svelte 5 и legacy syntax не смешивают без причины; специальное имя файла важнее общей конвенции «назвать все PascalCase».

hooks.server формирует доверенный request context, но один guard в layout не заменяет проверку каждого закрытого API/action. Общий модуль может хранить неизменяемую конфигурацию или пул соединений; пользовательское mutable-состояние передается через locals/request. Static assets доступны публично, server-only код туда не кладут.

Кто что делает

Человек

Выбирает major, adapter и область ответственности UI/load/action/API.

AI-агент

Сверяет специальные имена и request context, не переносит конфигурацию из другого major и не создает server singleton пользователя.

Как проверить у себя

Вход и действиеОжидаемый результатСвидетельство
Чистая сборка и переход на /ordersPage обнаружена, server load не попадает в клиентский bundleBuild и HTTP/client navigation
Endpoint вызван напрямую без layoutДоступ проверен самим handlerНегативный HTTP-тест
Параллельные запросы двух пользователейlocals/ответы не смешиваютсяКонкурентный тест
Изменена major-версияПроверены aliases, config, generated types и adapterРезультат migration/build smoke

Сходство имени файла с Next/Nuxt не делает его маршрутом SvelteKit.

ПервоисточникиИстория изменений на GitHub

Дата проверки отражает содержательную сверку. Синхронизация сайта не обновляет её автоматически.