From e5e4ace91aef276d841cc0b8493a0e7697fd29d8 Mon Sep 17 00:00:00 2001 From: "S.Gromov" Date: Sun, 26 Apr 2026 23:00:00 +0300 Subject: [PATCH] =?UTF-8?q?docs:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=20=C2=AB?= =?UTF-8?q?=D0=90=D0=BB=D0=B8=D0=B0=D1=81=D1=8B=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Добавлен прикладной раздел с конфигом tsconfig.paths и правилами использования - Зафиксирован отказ от префикса @/ - Пункт «Алиасы» добавлен в сайдбар после «Структуры проекта» --- .vitepress/config.ts | 1 + docs/docs/applied/aliases.md | 78 ++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 docs/docs/applied/aliases.md 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' +```