Файлы-реэкспорты плохи для перформанса — по двум причинам.
✂️
Из-за реэкспортов код-сплиттинг работает хужеКогда вы импортируете компонент из файла с реэкспортами:
import { Button } from '../components/index.js'
вы импортируете не просто этот компонент, а весь файл components/index.js. Это значит, что вы импортируете всё, что импортирует этот файл (= все другие компоненты). И бандлите это всё в текущий чанк.
Пример. Допустим, у вас есть огромный компонент Icon. Этот компонент используется только в коде, который вы кодсплиттите import()-ом.
Кажется, что Icon должен тоже закодсплиттиться, да? Но этого не произойдёт. Главный чанк импортирует Button из components/index.js — и вместе с этим файлом импортирует и Icon. Из-за этого Icon остаётся в главном чанке.
Кейс. Один клиент, с которым я работал, удалил файл components/index.js и заменил всё прямыми импортами. Бандл уменьшился на 200 кб: