Выбор ответа Middle Сборщики обновлено
Чем опасны barrel-файлы
Вопрос
В проекте у каждой папки есть index.ts, который реэкспортирует всё содержимое, и импорты пишут как import { Button } from '@/shared'. Какая проблема здесь типична?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Импорт одной сущности тянет весь barrel и мешает tree shaking. Чтобы найти Button, инструменту приходится загрузить index.ts и все модули, которые он реэкспортирует.
Варианты ответа
- TypeScript не умеет реэкспортировать типы через
export *из index.ts - Импорт одной сущности тянет весь barrel и мешает tree shakingправильный ответ
- Vite запрещает файлы с именем index.ts в алиасах
@/ - Реэкспорт удваивает размер бандла за счёт копий модулей
Разбор
Чтобы найти Button, инструменту приходится загрузить index.ts и все модули, которые он реэкспортирует. В dev на Vite это сотни лишних запросов и медленный старт страницы, в тестах лишнее время. В проде сборщик обычно выкидывает неиспользуемое, но если в модулях есть побочные эффекты (или пакет не помечен sideEffects: false), код останется в бандле.
- TypeScript реэкспортирует типы, в том числе через
export type. - Ограничений на имя
index.tsнет. - Дублирования кода реэкспорт не создаёт: модуль попадает в граф один раз.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.