Перейти к содержанию

Модульность и видимость экспортов

Разделение кода на мелкие модули — хорошая практика, но она сталкивается с тривиальной проблемой инкапсуляции: экспортированные из внутренних файлов сущности становятся видны по всему проекту. Если в нескольких подмодулях есть функция или переменная с одинаковым именем, IDE при автодополнении будет предлагать импорты из всех этих файлов.

Ни у платформы, ни у языкового стандарта пока нет простого механизма видимости по модулю — то есть способа пометить экспорт как доступный только внутри границ модуля/папки. На площадке обсуждения стандартов EcmaScript (Ecma Technical Committee 39) есть тред, где обсуждается идея директивы вроде 'use internal' или модификатора internal, которые ограничивали бы область видимости экспортов, но это остаётся лишь предложением.

Иные варианты существуют, но они компромиссны: уникальные имена, явное указание namespace, отказ от реэкспорта конфликтующих сущностей через barrel export, linter-правила, настройка IDE для предпочтения локальных импортов. Все эти подходы имеют свои минусы и не дают системного, стандартного контроля видимости экспортов.

Решения на уровне стандарта и экосистемы были бы желательны, но если у вас есть идеи по реализации — предлагайте в обсуждении или непосредственно в треде на es.discourse.group.

Last updated: