2026-01-30 02:02:32 +03:00
---
title: Структура проекта
---
# Структура проекта
Раздел описывает базовую структуру проекта и принципы организации модулей на уровне папок и файлов.
## Базовая структура проекта
**Хорошо**
```text
src/
├── app/ # Инициализация приложения, роутинг, провайдеры
│ ├── config/ # Конфигурации и константы уровня приложения
│ ├── providers/ # Провайдеры и обёртки приложения
│ ├── routing/ # Конфигурация маршрутов
2026-03-18 09:22:03 +03:00
│ ├── styles/ # Глобальные стили, CSS-переменные, custom media
2026-01-30 02:02:32 +03:00
│ └── index.ts # Публичный API слоя
├── screens/ # Экраны приложения
2026-03-18 09:22:03 +03:00
│ └── profile/ # Экран профиля
│ ├── profile.screen.tsx
│ └── index.ts
2026-01-30 02:02:32 +03:00
├── layouts/ # Общие шаблоны и каркасы страниц
2026-03-18 09:22:03 +03:00
│ └── main-layout/ # Основной layout
│ ├── main-layout.layout.tsx
│ └── index.ts
2026-01-30 02:02:32 +03:00
├── widgets/ # Крупные блоки интерфейса
2026-03-18 09:22:03 +03:00
│ └── header/ # Виджет шапки
│ ├── header.widget.tsx
│ └── index.ts
2026-01-30 02:02:32 +03:00
├── features/ # Пользовательские сценарии
│ └── auth-by-email/ # Авторизация по email
2026-03-18 09:22:03 +03:00
│ ├── ui/
│ │ └── login-form.ui.tsx
│ ├── model/
│ │ └── auth-by-email.store.ts
│ ├── auth-by-email.feature.tsx
│ └── index.ts
2026-01-30 02:02:32 +03:00
├── entities/ # Бизнес-сущности
│ └── user/ # Сущность пользователя
2026-03-18 09:22:03 +03:00
│ ├── model/
│ │ └── user.store.ts
│ ├── user.entity.tsx
│ └── index.ts
2026-01-30 02:02:32 +03:00
└── shared/ # Общие ресурсы проекта
2026-03-18 09:22:03 +03:00
├── ui/ # Повторно используемые UI-элементы
│ └── icon/
│ ├── styles/
│ │ └── icon.module.css
│ ├── types/
│ │ └── icon.interface.ts
│ ├── icon.ui.tsx
│ └── index.ts
2026-01-30 02:02:32 +03:00
├── lib/ # Утилиты и хелперы
├── services/ # Общие сервисы и клиенты
├── config/ # Общие конфигурации
└── assets/ # Ресурсы
├── images/ # Изображения
├── icons/ # Иконки
├── fonts/ # Шрифты
└── video/ # Видео
```
**Плохо**
```text
// Плохо: слои смешаны, нет понятных границ и публичного API.
src/
├── components/
├── api/
├── styles/
└── user.ts
```
## Правила организации
2026-03-18 09:22:03 +03:00
- В слоях FSD (`features` , `entities` , `widgets` , `screens` и т.д.) `ui/` используется только для дочерних элементов, которые относятся к модулю и не экспортируются отдельно. Главные компоненты, которые составляют сам слой, держат собственные `*.feature.tsx` , `*.widget.tsx` и т. п., а `ui/` служит для вспомогательных мелких компонентов.
- В `shared/ui/` хранятся базовые UI-элементы/компоненты, которыми пользуются сразу несколько модулей; в этом случае они экспортируются наружу и не считаются «дочерними» для слоя.
- Если модуль строится вокруг «главного» компонента (`*.feature.tsx` , `*.screen.tsx` , `*.widget.tsx` ), помещайте е г о в корень модуля и экспортируйте через `index.ts` . Проверяйте, что `ui/` не используется просто как «контейнер» слоя.
2026-01-30 02:02:32 +03:00
- Каждый слой и модуль хранится в собственной папке.
2026-03-18 09:22:03 +03:00
- Внутренние реализации разделяются на `ui/` , `model/` , `styles/` , `helpers/` , `lib/` , `api/` .
2026-01-30 02:02:32 +03:00
- Публичный API модуля объявляется в `index.ts` .
- Внутренние файлы не импортируются напрямую извне.
- Н е смешивать ответственность разных слоёв в одном модуле.