docs: добавить раздел «Алиасы»
- Добавлен прикладной раздел с конфигом tsconfig.paths и правилами использования - Зафиксирован отказ от префикса @/ - Пункт «Алиасы» добавлен в сайдбар после «Структуры проекта»
This commit is contained in:
@@ -33,6 +33,7 @@ const sidebar = [
|
|||||||
text: 'Прикладные разделы',
|
text: 'Прикладные разделы',
|
||||||
items: [
|
items: [
|
||||||
{ text: 'Структура проекта', link: '/docs/applied/project-structure' },
|
{ text: 'Структура проекта', link: '/docs/applied/project-structure' },
|
||||||
|
{ text: 'Алиасы', link: '/docs/applied/aliases' },
|
||||||
{ text: 'Компоненты', link: '/docs/applied/components' },
|
{ text: 'Компоненты', link: '/docs/applied/components' },
|
||||||
{ text: 'Страницы (App Router)', link: '/docs/applied/page-level' },
|
{ text: 'Страницы (App Router)', link: '/docs/applied/page-level' },
|
||||||
{ text: 'Шаблоны и генерация кода', link: '/docs/applied/templates-generation' },
|
{ text: 'Шаблоны и генерация кода', link: '/docs/applied/templates-generation' },
|
||||||
|
|||||||
78
docs/docs/applied/aliases.md
Normal file
78
docs/docs/applied/aliases.md
Normal file
@@ -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'
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user