sync
Some checks failed
CI/CD Pipeline / docker (push) Failing after 2m7s
CI/CD Pipeline / deploy (push) Has been skipped

This commit is contained in:
2026-03-23 21:48:54 +03:00
parent d1af4619f7
commit a9f91dae29
6 changed files with 486 additions and 113 deletions

5
parts/17-svg-sprites.md Normal file
View File

@@ -0,0 +1,5 @@
---
title: SVG-спрайты
---
# SVG-спрайты

View File

@@ -16,8 +16,8 @@ title: Архитектура
## Слои (FSD)
- **app** — инициализация приложения, роутинг, конфигурации, глобальные провайдеры.
- **screens** — экраны и их композиция.
- **app** — инициализация приложения: провайдеры, глобальные стили. В Next.js эта же папка `app/` дополнительно содержит системные файлы роутинга (`layout.tsx`, `page.tsx`).
- **screens** — UI-компоненты страниц. Каждый экран — отдельный компонент, который собирает виджеты и фичи конкретной страницы. Роутинг только использует эти компоненты — он не является частью слоя `screens`. В Next.js файлы `page.tsx` остаются тонкими: импортируют экран и рендерят его.
- **layouts** — каркас и шаблоны страниц.
- **widgets** — крупные блоки интерфейса, собирающие несколько сценариев.
- **features** — отдельные пользовательские действия и сценарии.

View File

@@ -8,29 +8,25 @@ title: Структура проекта
## Базовая структура проекта
**Хорошо**
Слои FSD не зависят от фреймворка. Различается только содержимое `app/` — в React SPA это конфигурация роутинга, в Next.js — системные файлы фреймворка (`layout.tsx`, `page.tsx`, route-сегменты).
```text
src/
├── app/ # Инициализация приложения, роутинг, провайдеры
│ ├── config/ # Конфигурации и константы уровня приложения
── providers/ # Провайдеры и обёртки приложения
│ ├── routing/ # Конфигурация маршрутов
│ ├── styles/ # Глобальные стили, CSS-переменные, custom media
│ └── index.ts # Публичный API слоя
├── screens/ # Экраны приложения
│ └── profile/ # Экран профиля
├── app/ # Инициализация приложения (см. «Слой app/»)
├── screens/ # UI-компоненты страниц
── profile/
│ ├── profile.screen.tsx
│ └── index.ts
├── layouts/ # Общие шаблоны и каркасы страниц
│ └── main-layout/ # Основной layout
│ └── main-layout/
│ ├── main-layout.layout.tsx
│ └── index.ts
├── widgets/ # Крупные блоки интерфейса
│ └── header/ # Виджет шапки
│ └── header/
│ ├── header.widget.tsx
│ └── index.ts
├── features/ # Пользовательские сценарии
│ └── auth-by-email/ # Авторизация по email
│ └── auth-by-email/
│ ├── ui/
│ │ └── login-form.ui.tsx
│ ├── model/
@@ -38,7 +34,7 @@ src/
│ ├── auth-by-email.feature.tsx
│ └── index.ts
├── entities/ # Бизнес-сущности
│ └── user/ # Сущность пользователя
│ └── user/
│ ├── model/
│ │ └── user.store.ts
│ ├── user.entity.tsx
@@ -54,12 +50,49 @@ src/
│ └── index.ts
├── lib/ # Утилиты и хелперы
├── services/ # Общие сервисы и клиенты
├── config/ # Общие конфигурации
├── config/ # Общие конфигурации и константы
└── assets/ # Ресурсы
├── images/ # Изображения
├── icons/ # Иконки
├── fonts/ # Шрифты
└── video/ # Видео
├── images/
├── icons/
├── fonts/
└── video/
```
## Слой app/
Общее для обоих вариантов: провайдеры и глобальные стили. Различается только способ организации роутинга.
### React SPA
```text
src/app/
├── providers/ # Провайдеры и обёртки приложения
├── routing/ # Конфигурация маршрутов (React Router)
├── styles/ # Глобальные стили, CSS-переменные, custom media
└── index.ts # Entry point приложения
```
### Next.js (App Router)
```text
src/app/
├── providers/ # Провайдеры и обёртки приложения
├── styles/ # Глобальные стили, CSS-переменные, custom media
├── layout.tsx # Корневой layout (подключает providers, styles)
├── page.tsx # Главная страница
└── profile/
└── page.tsx # Рендерит ProfileScreen
```
В Next.js файлы `page.tsx` остаются тонкими — они только импортируют экран из `screens/` и рендерят его. Вся логика, зависимости и стили страницы живут в компоненте экрана, а не в `app/`.
```tsx
// src/app/profile/page.tsx
import { ProfileScreen } from '@/screens/profile';
export default function ProfilePage() {
return <ProfileScreen />;
}
```
**Плохо**