diff --git a/.vitepress/config.ts b/.vitepress/config.ts index 280a43d..e243bef 100644 --- a/.vitepress/config.ts +++ b/.vitepress/config.ts @@ -33,6 +33,7 @@ const sidebar = [ text: 'Прикладные разделы', items: [ { text: 'Структура проекта', link: '/docs/applied/project-structure' }, + { text: 'Алиасы', link: '/docs/applied/aliases' }, { text: 'Компоненты', link: '/docs/applied/components' }, { text: 'Страницы (App Router)', link: '/docs/applied/page-level' }, { text: 'Шаблоны и генерация кода', link: '/docs/applied/templates-generation' }, diff --git a/docs/docs/applied/aliases.md b/docs/docs/applied/aliases.md new file mode 100644 index 0000000..0dc2c09 --- /dev/null +++ b/docs/docs/applied/aliases.md @@ -0,0 +1,78 @@ +--- +title: Алиасы +keywords: [алиасы, aliases, paths, tsconfig, импорты, baseUrl, app, layouts, screens, widgets, business, infrastructure, ui, shared] +--- + +# Алиасы + +Импорты в проекте идут через алиасы слоёв SLM-архитектуры — по одному на каждый слой `src/`. Префикс `@/` **не используется**: имя слоя само по себе однозначно адресует код. + +Слои и направление зависимостей — [Архитектура: слои](/docs/basics/architecture/reference/layers). + +## Конфиг + +`tsconfig.json` в корне проекта: + +```json +{ + "compilerOptions": { + "paths": { + "app/*": ["./src/app/*"], + "layouts/*": ["./src/layouts/*"], + "screens/*": ["./src/screens/*"], + "widgets/*": ["./src/widgets/*"], + "business/*": ["./src/business/*"], + "infrastructure/*": ["./src/infrastructure/*"], + "ui/*": ["./src/ui/*"], + "shared/*": ["./src/shared/*"] + } + } +} +``` + +Восемь алиасов — ровно по числу слоёв. Других алиасов в проекте нет. + +## Правила + +- **Каждый импорт между модулями — через алиас слоя.** Относительные пути (`../../`) запрещены за пределами своего модуля. +- **Внутри одного модуля** допустимы относительные импорты (`./model`, `./ui/button`) — это часть инкапсуляции модуля. +- **Префикс `@/` не используется.** Имя слоя — само по себе адрес. +- **Направление импортов** определяется архитектурой, не алиасами. Алиас разрешает импорт технически, но не отменяет правила слоёв (→ [Слои](/docs/basics/architecture/reference/layers)). + +**Хорошо** + +```ts +import { Button } from 'ui/button' +import { useUser } from 'business/user' +import { formatDate } from 'shared/utils/date' +``` + +**Плохо** + +```ts +// Относительный путь между модулями +import { Button } from '../../../ui/button' + +// Префикс @/, которого нет в paths +import { Button } from '@/ui/button' + +// Алиас на src — не предусмотрен +import { Button } from 'src/ui/button' +``` + +## Внутри модуля + +Внутри своего модуля — относительные пути: + +```ts +// src/ui/button/button.tsx +import styles from './button.module.css' +import { Icon } from './icon' +``` + +Не использовать алиас на самого себя: + +```ts +// Плохо — алиас вместо относительного пути внутри модуля +import { Icon } from 'ui/button/icon' +```