Как стать автором
Обновить

Комментарии 10

index.ts - это публичное API вашего модуля. С этой точки зрения (комплиментарной пункту 2 из плюсов) этот файл весьма необходим.

Согласен. Необходим и очень удобен при разработке.

Современные сборщики вполне умеют вырезать из бандла все, что в нем не используется с помощью механизма TreeShaking, поэтому в плане увеличения размера бандла index.ts никак не влияет.

Для меня самым большим недостатком index.ts являются цикличиские зависимости. Причем они не начнут появляться, пока ваш проект не вырастет, и исправление может доставить неиллюзорные проблемы.

вебпаковский плагин хорошо их отслеживает, можно его на старте подрубить и не допускать появления циклических зависимостей.

Ещё можно такую штуку использовать, удобно

Конечно, и представляешь как обидно, когда тебе пишется цепочка из 10 файлов index.ts, где на каком то этапе образовалась циклическая зависимость? Добро пожаловать в приключение, где тебе надо скакать по всем 10ти и искать в каком именно, потому что зависимость могла возникнуть, например, в импорте пятого файла цепочки, но не в самом пятом файле. А потом мучительно менять импорты во всех остальных, чтобы это все исправить.

Проще отказаться от index.ts вовсе, за редким исключением:

  1. Папки с множеством простых функций с нулевой связностью (например, helpers)

  2. Высокоуровневого index.ts который работает на public api

не, не представляю, на самом деле) три достаточно весомых проекта с десятком индексовых без циркулярок были. Может, не со старта запустили?

Проблема легко решается. Чтобы избежать циклических зависимостей между файлами лежащими внутри проиндексированной дерриктории, нужно импортировать зависимости через относительный путь, в обход индекс файла. Индексный файл служит для импорта за пределами индексируемой дерриктории.

К счастью, есть (относительно) простой способ эти циклические зависимости порешать внутри модуля: https://medium.com/visual-development/how-to-fix-nasty-circular-dependency-issues-once-and-for-all-in-javascript-typescript-a04c987cf0de

Использовал для своего проекта, все работает как надо, хоть и требует некоторых приседаний.

Способ измерения и их количество вызывают некоторые сомнения. Один раз измерили тут, один раз тут - получилось больше, значит причина в index.ts. По хорошему бы замерять это раз 10 хотя бы в разных условиях, на нескольких примерах и смотреть на среднее отклонение в процентах. Ведь на время сборки влияет не только структура кода, но и загруженность устройства иными процессами в данный момент

Это было проделано несколько раз. Из изменений было только добавление и удаление Idex-файлов. Результат на всех итерациях был +- равен приведёному.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий