Skip to content

Алиасы

Импорты в проекте идут через алиасы слоёв SLM-архитектуры — по одному на каждый слой src/. Префикс @/ не используется: имя слоя само по себе однозначно адресует код.

Слои и направление зависимостей — Архитектура: слои.

Конфиг

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) — это часть инкапсуляции модуля.
  • Префикс @/ не используется. Имя слоя — само по себе адрес.
  • Направление импортов определяется архитектурой, не алиасами. Алиас разрешает импорт технически, но не отменяет правила слоёв (→ Слои).

Хорошо

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'