@deliro

Включать ли regenerator-runtime в dist модуля?

Привет! На работе пишу npm-модуль для общего использования. Модуль использует async/await. Также в модуле лежит, как принято, собранный и транспилированный babel'ем бандл в /dist. То есть, в этом бандле async/await переводятся в regeneratorRuntime.wrap/mark

Вопрос — включать ли regeneratorRuntime в бандл?

Есть три варианта, которые я знаю и которые мне не нравятся:
  1. Включить regeneratorRuntime в бандл.
    Плюсы:
    • Подключил и работает
    • Чистый конфиг вебпака

    Минусы:
    • Оверхэд по занимаемому месту +7кб на каждый модуль. Common Chunks не работают, потому что это уже собраный бандл. Итого, если модулей будет 20, будет 140кб регенераторов, хотя достаточно одного.


  2. Забота перекладывается на программиста. В документации мы пишем, что для работы нужен регенератор. Программист сам ставит регенератор любым способом, как ему больше нравится

    Плюсы:
    • Чистая архитектура
    • Нет оверхэда

    Минусы:
    • Возможная сложность настройки


  3. Выбрасываем dist из пакета, компилируем пакет при сборке проекта

    Плюсы:
    • Архитектурно ещё чище (нет dist, скомпиленного именно babel'ем)
    • babel или его аналог, или даже его отсутствие (вдруг target — es6) сам понимает, когда надо включать регенератор, а когда нет

    Минусы:
    • Ещё сложнее настройка. Например, в webpack нужно будет указать исключения из node_modules, которые надо прогонять babel'ем. А к babel'ю подключать плагин transform-runtime


    На самом деле, есть четвёрвый вариант — переписать в модуле все async/await на промисы, но он мне нравится ещё меньше.

    Повторяя свой вопрос: какой способ (возможно, не из перечисленных) является лучшим?
  • Вопрос задан
  • 1429 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы