К основному содержанию
правило

sveltekit — правило для Cursor: что делает и как установить

Правило задаёт структуру SvelteKit-проектов, работу с Svelte 5 runes, маршрутизацией, тестами и серверным кодом. Подходит для Cursor.

Установить в Cursor · Вручную: положить файлы Все способы и платформы ↓
.cursor/rules/sveltekit.mdc
Открыть на GitHub

Что делает sveltekit

Правило охватывает файлы и каталоги SvelteKit: страницы и API размещаются в src/routes/, переиспользуемый код — в src/lib/, серверные модули — в src/lib/server/. Для маршрутов используются файлы с префиксом +, а компоненты Svelte пишутся с lang="ts" и $props().

Оно советует применять $state() для локального состояния, классы для сложной общей логики, +page.ts и +page.server.ts для загрузки данных, а +server.ts для API. Также правило охватывает пререндеринг, семантический HTML, клавиатурную навигацию, Playwright, Vitest, svelte-check, ESLint и Prettier.

Импорт $lib/server в клиентский код ломается на этапе сборки, поэтому серверные функции нужно вызывать из +page.server.ts или +server.ts. Файл применяется к js, jsx, ts, tsx и svelte через шаблон **/*.{js,jsx,ts,tsx,svelte}.

Какие задачи решает

  • разложить страницы и API по структуре SvelteKit
  • типизировать пропсы компонентов через $props()
  • выбрать подходящий файл для загрузки данных
  • разделить серверный и клиентский код
  • настроить проверки и E2E-тесты

Примеры запросов агенту

  • Проверь этот компонент по правилам Svelte 5 и замени локальное состояние на $state().
  • Разложи маршруты и API по структуре SvelteKit, используя +page.svelte и +server.ts.
  • Проверь загрузку данных в src/routes/blog/[slug]/+page.ts и типизируй её через $types.

Как установить sveltekit

Вручную: положить файлы

.cursor/rules/sveltekit.mdc

Во frontmatter: description, globs, alwaysApply

По шагам, с командами для каждой платформы: Cursor rules: файлы .mdc, четыре режима и замена .cursorrules

Вопросы о sveltekit

Как установить sveltekit в Cursor?

Создай файл .cursor/rules/sveltekit.mdc и добавь в него содержимое правила.

Что делает правило sveltekit?

Оно задаёт рекомендации для структуры SvelteKit-приложения, компонентов на TypeScript, Svelte 5 runes, маршрутизации, производительности, доступности и тестирования.

Почему нельзя импортировать $lib/server в +page.svelte?

SvelteKit блокирует такой импорт на этапе сборки. Серверный код нужно подключать через +page.server.ts или +server.ts.

Исходный текст

sveltekit.mdc · CC0-1.0
---
description: Definitive guidelines for building scalable, performant, and maintainable SvelteKit applications using modern best practices, TypeScript, and Svelte 5 runes.
globs: **/*.{js,jsx,ts,tsx,svelte}
---
# SvelteKit Best Practices

This guide outlines the definitive best practices for developing SvelteKit applications. Adhere to these principles for consistent, high-quality, and performant code.

## 1. Code Organization and Structure

Maintain a clean, scalable project structure.

*   **`src/routes/`**: All page and API endpoints. Co-locate `+page.svelte`, `+page.ts`, `+layout.svelte`, `+error.svelte`, `+server.ts` files.
*   **`src/lib/`**: Reusable utilities, components, and client-side logic. Imported via `$lib`.
*   **`src/lib/server/`**: Server-only modules. Imported via `$lib/server`. SvelteKit prevents client-side import.
*   **`src/params/`**: Custom route matchers.
*   **`static/`**: Static assets (e.g., `favicon.png`, `robots.txt`).
*   **`tests/`**: End-to-end (E2E) tests (e.g., Playwright). Unit tests can be co-located with `src/`.

**Rule**: Use `+` prefixed filenames for SvelteKit's routing and special files.

❌ BAD:
```
src/routes/users/index.svelte
src/routes/api/users.ts
```

✅ GOOD:
```svelte
src/routes/users/+page.svelte
src/routes/api/users/+server.ts
```

## 2. Component Architecture

Design components for reusability and clarity.

**Rule**: Use `lang="ts"` for TypeScript in Svelte components and leverage `$props()` for type-safe props.

```svelte
<!-- src/lib/components/Button.svelte -->
<script lang="ts">
  import type { HTMLButtonAttributes } from 'svelte/elements';
  import type { Snippet } from 'svelte';

  interface Props extends HTMLButtonAttributes {
    variant?: 'primary' | 'secondary';
    children: Snippet;
  }

  let { variant = 'primary', children, ...rest }: Props = $props();
</script>

<button class:primary={variant === 'primary'} class:secondary={variant === 'secondary'} {...rest}>
  {@render children()}
</button>

<style>
  button { /* ... base styles ... */ }
  .primary { /* ... primary styles ... */ }
  .secondary { /* ... secondary styles ... */ }
</style>
```

## 3. State Management

Prioritize Svelte 5 runes for local reactivity and classes for complex, encapsulated state.

**Rule**: Use `$state()` for local, reactive component state. For complex logic or shared state, encapsulate it within a class.

❌ BAD (Old Svelte 4 store for local state):
```svelte
<script lang="ts">
  import { writable } from 'svelte/store';
  const count = writable(0);
</script>

<button on:click={() => count.update(n => n + 1)}>Count: {$count}</button>
```

✅ GOOD (Svelte 5 runes for local state):
```svelte
<script lang="ts">
  let count = $state(0);
</script>

<button on:click={() => count++}>Count: {count}</button>
```

✅ GOOD (Class for complex/shared state):
```typescript
// src/lib/stores/counter.ts
class CounterStore {
  count = $state(0);
  increment() {
    this.count++;
  }
  reset() {
    this.count = 0;
  }
}
export const counter = new CounterStore(); // Singleton instance
```
```svelte
<!-- src/routes/+page.svelte -->
<script lang="ts">
  import { counter } from '$lib/stores/counter';
</script>

<button on:click={() => counter.increment()}>Count: {counter.count}</button>
```

## 4. Routing and Data Fetching

Leverage SvelteKit's file-system routing and `load` functions.

**Rule**: Use `+page.ts` for universal `load` functions (SSR + CSR) and `+page.server.ts` for server-only `load` functions or form actions. Always type `load` functions with `$types`.

```typescript
// src/routes/blog/[slug]/+page.ts
import { error } from '@sveltejs/kit';
import type { PageLoad } from './$types';

export const load: PageLoad = async ({ params, fetch }) => {
  const res = await fetch(`/api/blog/${params.slug}`);
  if (!res.ok) {
    error(res.status, 'Could not fetch blog post.');
  }
  const post = await res.json();
  return { post };
};
```
```svelte
<!-- src/routes/blog/[slug]/+page.svelte -->
<script lang="ts">
  import type { PageProps } from './$types';
  let { data }: PageProps = $props();
</script>

<h1>{data.post.title}</h1>
<p>{data.post.content}</p>
```

**Rule**: For API endpoints, use `+server.ts` files.

```typescript
// src/routes/api/blog/[slug]/+server.ts
import { json, error } from '@sveltejs/kit';
import type { RequestHandler } from './$types';

export const GET: RequestHandler = async ({ params }) => {
  // In a real app, fetch from DB
  if (params.slug === 'hello-world') {
    return json({ title: 'Hello World', content: 'Welcome to our blog!' });
  }
  error(404, 'Not Found');
};
```

## 5. Performance Considerations

Optimize for speed and efficiency.

**Rule**: Prerender static routes by exporting `export const prerender = true` in `+page.ts` or `+layout.ts`. Use `@sveltejs/enhanced-img` for image optimization.

```typescript
// src/routes/about/+page.ts
export const prerender = true; // This page will be statically generated at build time
```

**Rule**: Deploy to platforms like Vercel for zero-config serverless functions and automatic optimizations.

## 6. Accessibility

Build inclusive user interfaces.

**Rule**: Always use semantic HTML, ensure keyboard navigability, and test with screen readers.

❌ BAD:
```svelte
<div on:click={doSomething}>Click me</div>
```

✅ GOOD:
```svelte
<button on:click={doSomething}>Click me</button>
```

## 7. Testing Approaches

Implement a robust testing strategy.

**Rule**: Use Playwright for end-to-end tests in `tests/` and Vitest for unit tests, co-located with the code they test. Integrate `svelte-check`, ESLint, and Prettier into your CI pipeline.

```typescript
// src/lib/utils/math.test.ts (Vitest unit test)
import { expect, test } from 'vitest';
import { add } from './math';

test('add function sums numbers correctly', () => {
  expect(add(1, 2)).toBe(3);
});
```

## 8. Common Pitfalls and Gotchas

Avoid common mistakes that lead to bugs or performance issues.

**Rule**: Do not import `$lib/server` modules into client-side code. SvelteKit will prevent this at build time, but catching it early saves time.

❌ BAD (in `+page.ts` or `+page.svelte`):
```typescript
import { serverOnlyFunction } from '$lib/server/utils'; // This will fail
```

✅ GOOD (in `+page.server.ts` or `+server.ts`):
```typescript
import { serverOnlyFunction } from '$lib/server/utils'; // Correct usage
```

**Rule**: Configure `tsconfig.json` correctly, extending SvelteKit's generated config. Specifically, ensure `verbatimModuleSyntax: true` and `isolatedModules: true`.

```json
// tsconfig.json
{
  "extends": "./.svelte-kit/tsconfig.json",
  "compilerOptions": {
    "target": "ES2022",
    "verbatimModuleSyntax": true,
    "isolatedModules": true,
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true,
    "moduleResolution": "bundler",
    "module": "ESNext",
    "resolveJsonModule": true,
    "allowJs": true,
    "checkJs": true,
    "lib": ["ES2022", "DOM", "DOM.Iterable"],
    "types": ["vitest/globals"] // If using Vitest
  },
  "include": ["src/**/*.d.ts", "src/**/*.ts", "src/**/*.js", "src/**/*.svelte"],
  "exclude": ["node_modules"]
}
```

© sanjeed5 · CC0-1.0 · sanjeed5/awesome-cursor-rules-mdc

Похожие правила IDE

Все правила IDE по теме «Фронтенд и UI» →
sveltekit-typescript-guide-cursorrules-prompt-file PatrickJS Правило для Cursor, которое настраивает агента на Svelte 5, SvelteKit и TypeScript: структура проекта, руны, состояние. ★ 41 028звёзд репо sveltekit-tailwindcss-typescript-cursorrules-promp PatrickJS Задаёт стандарты стека SvelteKit 2, Tailwind CSS и TypeScript для Cursor. Помогает генерировать типизированные компоненты с правильной структурой файлов. ★ 41 028звёзд репо winui3 официальный github Правило задаёт рекомендации для WinUI 3 и Windows App SDK: от XAML и потоков до окон и MVVM. Пригодится, чтобы Copilot учитывал особенности настольных приложений Windows. ★ 40 478звёзд репо vue официальный github Правило задаёт Copilot стандарты Vue 3: Composition API, <script setup>, реактивность, Pinia и Vue Router. Пригодится, когда агент пишет компоненты в вашем стиле. ★ 40 478звёзд репо tanstack-start-shadcn-tailwind официальный github Правило задаёт Copilot стек TanStack Start, Shadcn/ui и Tailwind CSS и требует валидировать внешние данные через Zod. ★ 40 478звёзд репо tailwind-v4-vite официальный github Правило помогает подключить Tailwind CSS v4 к проекту на Vite через официальный плагин. Пригодится и для новой установки, и при переходе с v3. ★ 40 478звёзд репо svelte официальный github Направляет GitHub Copilot на стандарты Svelte 5 и SvelteKit 2: руны вместо старых сторов, типизация компонентов и безопасная работа с SSR. ★ 40 478звёзд репо power-bi-custom-visuals-development официальный github Правило для GitHub Copilot, которое подсказывает агенту, как писать кастомные визуалы Power BI на React, D3.js и TypeScript. ★ 40 478звёзд репо

Из того же набора240

Весь набор →
three-js Правило для Cursor задаёт стандарты разработки на three.js: обработка ошибок WebGL, ленивая загрузка ассетов, оптимизация цикла рендера и освобождение ресурсов. ★ 3 580звёзд репо terraform Задаёт стандарты написания манифестов Terraform для Cursor: структуру каталогов, именование, блокировки стейта и правила модулей. ★ 3 580звёзд репо tensorflow Правило задаёт ориентиры для Python-кода с TensorFlow: модели на tf.keras, конвейеры данных на tf.data и компиляцию функций через @tf.function. Пригодится для настройки проекта машинного обучения. ★ 3 580звёзд репо tauri Правило для Cursor задаёт, как писать Rust-бэкенд в Tauri: команды, глобальное состояние, ошибки и безопасность. Пригодится, когда фронтенд уже есть, а Rust-часть растёт. ★ 3 580звёзд репо tailwind Задаёт стандарты верстки на Tailwind CSS: структуру токенов, порядок утилитных классов и правила доступности интерфейса. ★ 3 580звёзд репо svelte Правило для Cursor задаёт, как писать компоненты Svelte 5: руны вместо старой реактивности, типизация и ключи в списках. Пригодится, если проект уже на Svelte 5. ★ 3 580звёзд репо supabase Задаёт стандарты написания SQL, моделирования схем и политик безопасности для проектов на Supabase в Cursor. ★ 3 580звёзд репо stripe Правило задаёт практики для платёжных сценариев Stripe: от Checkout Sessions и Payment Intents до обработки ошибок и вебхуков. ★ 3 580звёзд репо

Спонсоры проекта

Компании, которые помогают держать аналитику открытой