2022-12-02 20:17:33
Выпущу портянку:
Про дефолты
Почему плохо
- У всех есть автоимпорт
- Переименование не гарантирует переименование импортов
- В целом, работа с именами дефолтных импортов - магия
- Возможность экспортировать анонимные функции
- Возможность указать любое имя при импорте значения
- В случае множественных импортов создается неконсистентность
- Многострочность
- Отсутствие строгости нейминга -> дубликаты имен
Почему именованые экспорты
- Гарантия корректности нейминга (TS)
- Унификация экспортов, отсутствие когнитивной нагрузки для принятия решения
- Лучшая читаемость, особенно при множественных экспортах (хотя это больше про export const foo vs export { foo } ) - для изменения значения не нужно скроллить туда-сюда, чтобы понять, экспортируется ли оно
- Public API
- Мы всегда можем увидеть, что экспортирует модуль без необходимости лезть внутрь
- Полная явность и открытость содержимого модуля
- Автокомплит
- Реэкспорты без алиасинга
- dynamic imports (кроме React.lazy/dynamic из некста)
Когда хорошо
- Библиотечный экспорт (те же реакт/лодаш)
- Специфичные потребители
- Требования фреймворков/библиотек (напимер, страницы в NextJS)
- Финальные компоненты для lazy динамик импортов
- Конфиги/схемы/etc. в том случае, когда их будет потреблять сокрытая автоматика (webpack, next, tailwind, etc.)
Ссылочки
Обзорные статьи (и канал в телеге хех) с аргументацией отказа от дефолтных импортом
- https://humanwhocodes.com/blog/2019/01/stop-using-default-exports-javascript-module/
- https://basarat.gitbook.io/typescript/main-1/defaultisbad
- https://t.me/why_not_export_default
- RFC в гитлабе (там тоже был полный разворот от "только default" к "только named") - https://gitlab.com/gitlab-org/frontend/rfcs/-/issues/20
Стайлгайды
- GitLab - https://docs.gitlab.com/ee/development/fe_guide/style/javascript.html#es-module-syntax
Google - https://google.github.io/styleguide/jsguide.html#es-module-exports
17 views17:17