Выбор ответа Middle Сборщики обновлено

Чем опасны barrel-файлы

Вопрос

В проекте у каждой папки есть index.ts, который реэкспортирует всё содержимое, и импорты пишут как import { Button } from '@/shared'. Какая проблема здесь типична?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Импорт одной сущности тянет весь barrel и мешает tree shaking. Чтобы найти Button, инструменту приходится загрузить index.ts и все модули, которые он реэкспортирует.

Варианты ответа

  1. TypeScript не умеет реэкспортировать типы через export * из index.ts
  2. Импорт одной сущности тянет весь barrel и мешает tree shakingправильный ответ
  3. Vite запрещает файлы с именем index.ts в алиасах @/
  4. Реэкспорт удваивает размер бандла за счёт копий модулей

Разбор

Чтобы найти Button, инструменту приходится загрузить index.ts и все модули, которые он реэкспортирует. В dev на Vite это сотни лишних запросов и медленный старт страницы, в тестах лишнее время. В проде сборщик обычно выкидывает неиспользуемое, но если в модулях есть побочные эффекты (или пакет не помечен sideEffects: false), код останется в бандле.

  • TypeScript реэкспортирует типы, в том числе через export type.
  • Ограничений на имя index.ts нет.
  • Дублирования кода реэкспорт не создаёт: модуль попадает в граф один раз.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме