Версия источника: 4880e8b4372c96001c2e052be28b68a95d31252b
Синхронизировано: 2026-11-09T11:15:07.649Z
Источник: https://github.com/sergey-from-riders/vibecoding-base/tree/4880e8b4372c96001c2e052be28b68a95d31252b

<a id="frameworks-sveltekit-server"></a>

# SvelteKit: server-only modules

## Коротко

Секреты и доступ к БД держите в серверных модулях; клиенту возвращайте только разрешённые поля.

## Плохо

```typescript
// +page.ts: универсальный load
import { db } from "$lib/db";
```

## Хорошо

```typescript
// +page.server.ts: только сервер
import { db } from "$lib/server/db";
export async function load() {
  return { products: await db.product.findMany({
    select: { id: true, title: true },
    orderBy: { id: "asc" }, take: 50
  }) };
}
```

## Почему

Универсальный код может попасть в клиентскую сборку. Серверная загрузка тоже передаёт возвращённые данные браузеру.

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

SvelteKit 2; db — пример ORM-клиента проекта. В приватной выдаче добавьте проверку сессии и ограничение владельца. $lib/server и private env нельзя импортировать в клиентский код.

## Человек

Определяет, какие данные публичны.

## Агент

Размещает модуль на сервере, проверяет состав ответа и сборку.

## Пример применения

Каталог возвращает только id и title. Закупочная цена хранится в БД, но не включается в select и данные страницы.

## Как проверить

- Секреты отсутствуют в клиентской сборке.
- Ответ load не содержит закрытых полей.

## Источники

- [Server-only modules • SvelteKit Docs](https://svelte.dev/docs/kit/server-only-modules)
- [Loading data • SvelteKit Docs](https://svelte.dev/docs/kit/load)

Уровень: Рекомендуется. Проверено: 2026-11-09. Изменено: 2026-11-09.

[Исходный файл](https://github.com/sergey-from-riders/vibecoding-base/blob/4880e8b4372c96001c2e052be28b68a95d31252b/registry/standards/frameworks/platforms/rules/sveltekit-server.md)
