{data.post.title}
\n\n\n3. Серверные Actions (формы)
\n// +page.server.ts\nimport type { Actions } from './$types';\n\nexport const actions: Actions = {\n login: async ({ request, cookies }) => {\n const form = await request.formData();\n const email = form.get('email') as string;\n // ... логика логина\n cookies.set('session', sessionId, { path: '/', httpOnly: true });\n return { success: true };\n }\n};\n\n\n4. SSR, SSG, CSR
\n// +page.ts — управление рендерингом\nexport const prerender = true; // SSG: генерируется при сборке\nexport const ssr = false; // CSR: только в браузере\n\n\n5. Адаптеры для деплоя
\n- \n
@sveltejs/adapter-node— Node.js сервер \n@sveltejs/adapter-static— статические файлы (Netlify, GitHub Pages) \n@sveltejs/adapter-cloudflare— Cloudflare Workers \n@sveltejs/adapter-vercel— Vercel Edge Functions \n
6. Встроенные возможности
\n- \n
- Хуки (
hooks.server.ts): глобальный middleware \n - Env-переменные:
$env/static/public,$env/dynamic/private\n - Алиасы:
$lib→src/lib/\n - i18n через параметры маршрутов или
paraglide-js\n
Подводные камни
\n- \n
- Имена файлов строго регламентированы:
+page.svelte,+layout.svelte,+server.ts— опечатка в имени молча игнорируется. \n +page.server.tsvs+page.ts: серверный — только на сервере (secrets безопасны), универсальный — и на клиенте (не хранить secrets). \n- Данные из
load()сериализуются черезdevalue— не все типы поддерживаются (нельзя передать функции, Map сериализуется корректно). \n - Layout
load()выполняется при каждой навигации, не только при первом рендере — осторожно с дорогими запросами. \n - Адаптеры нужно выбирать до деплоя — миграция между ними требует изменения конфигурации сборки. \n
+error.svelteдолжен быть в каждой директории, где нужна кастомная страница ошибки — без него используется корневой. \n
Svelte / SvelteKitJuniorTechnical
Что такое SvelteKit и что он добавляет поверх Svelte?
SvelteKit добавляет поверх Svelte файловую маршрутизацию, SSR/SSG, серверный load() для загрузки данных, Actions для обработки форм, хуки для middleware и адаптеры для деплоя на Node, Vercel, Cloudflare.
Что такое SvelteKit
SvelteKit — это full-stack фреймворк на базе Svelte, аналог Next.js для React или Nuxt для Vue. Он добавляет серверную часть, маршрутизацию, загрузку данных и деплой.
Что Svelte делает сам по себе
- Компилирует
.svelteкомпоненты в JavaScript без виртуального DOM. - Реактивность, шаблоны, анимации.
- Нет маршрутизации, нет SSR, нет сборки приложения — только компоненты.
Что добавляет SvelteKit
1. Файловая маршрутизация
src/routes/
+page.svelte # GET /
+layout.svelte # общий layout для всех дочерних маршрутов
about/
+page.svelte # GET /about
blog/
[slug]/
+page.svelte # GET /blog/my-post
+page.server.ts # серверный load для этого маршрута
api/
users/
+server.ts # REST API: GET /api/users, POST /api/users
2. Загрузка данных через load()
// src/routes/blog/[slug]/+page.server.ts
import type { PageServerLoad } from './$types';
import { error } from '@sveltejs/kit';
export const load: PageServerLoad = async ({ params, fetch }) => {
const post = await fetch(`/api/posts/${params.slug}`).then(r => r.json());
if (!post) throw error(404, 'Пост не найден');
return { post };
};
// src/routes/blog/[slug]/+page.svelte
<script lang="ts">
import type { PageData } from './$types';
let { data } = $props<{ data: PageData }>();
</script>
<h1>{data.post.title}</h1>
3. Серверные Actions (формы)
// +page.server.ts
import type { Actions } from './$types';
export const actions: Actions = {
login: async ({ request, cookies }) => {
const form = await request.formData();
const email = form.get('email') as string;
// ... логика логина
cookies.set('session', sessionId, { path: '/', httpOnly: true });
return { success: true };
}
};
4. SSR, SSG, CSR
// +page.ts — управление рендерингом
export const prerender = true; // SSG: генерируется при сборке
export const ssr = false; // CSR: только в браузере
5. Адаптеры для деплоя
@sveltejs/adapter-node— Node.js сервер@sveltejs/adapter-static— статические файлы (Netlify, GitHub Pages)@sveltejs/adapter-cloudflare— Cloudflare Workers@sveltejs/adapter-vercel— Vercel Edge Functions
6. Встроенные возможности
- Хуки (
hooks.server.ts): глобальный middleware - Env-переменные:
$env/static/public,$env/dynamic/private - Алиасы:
$lib→src/lib/ - i18n через параметры маршрутов или
paraglide-js
Подводные камни
- Имена файлов строго регламентированы:
+page.svelte,+layout.svelte,+server.ts— опечатка в имени молча игнорируется. +page.server.tsvs+page.ts: серверный — только на сервере (secrets безопасны), универсальный — и на клиенте (не хранить secrets).- Данные из
load()сериализуются черезdevalue— не все типы поддерживаются (нельзя передать функции, Map сериализуется корректно). - Layout
load()выполняется при каждой навигации, не только при первом рендере — осторожно с дорогими запросами. - Адаптеры нужно выбирать до деплоя — миграция между ними требует изменения конфигурации сборки.
+error.svelteдолжен быть в каждой директории, где нужна кастомная страница ошибки — без него используется корневой.
Common mistakes
- Путать SvelteKit с похожим API из соседнего фреймворка.
- Не объяснять, где код выполняется: сервер, клиент, build step или runtime.
- Игнорировать влияние на hydration, cache, bundle size или безопасность.
What the interviewer is testing
- Точно объясняет назначение механизма «SvelteKit».
- Показывает корректный минимальный пример без выдуманных API.
- Называет ограничения, failure modes и production-компромиссы.