Каковы последствия смешивания импорта es6 и cjs в webpack 4? - PullRequest
0 голосов
/ 21 апреля 2019

WebPack 4 допускает дрожание дерева при объединении модулей узлов и требует, чтобы модули es6 могли успешно применять встряхивание дерева (https://webpack.js.org/guides/tree-shaking/).. Версия модуля es6 предоставляется через запись module, версия es5. через запись main.

В моем сценарии у меня есть несколько модулей, которые предоставляют только основной и некоторый модуль, и они ссылаются друг на друга. Интересно, каков ожидаемый результат в финальной пачке веб-пакета.

Пример:

ModuleA exposes both main and module
ModuleB exposes both main and module
ModuleC exposed only main
Driver is the application bundled via webpack 4.

Зависимости:

Driver -> [ModuleB, ModuleC]
ModuleB -> [ModuleA]
ModuleC -> [ModuleA]

Мои вопросы: - сколько копий модуля А будет в комплекте? - удастся ли Webpack упаковать модуль A?

Я столкнулся с этой проблемой с помощью rxjs (ModuleA в моем примере). У меня был необработанный модуль CJS, использующий rxjs, и модуль es6, использующий rxjs. Я обнаружил, что веб-пакет содержал две копии rxjs, версию es6 и версию es5, и это вызвало несовместимость в проверке «isObservable» (которая не смогла распознать, что копия Observable из версии es5 была совместима с Observable). из версии es6).

Основываясь на моих тестах, я выгляжу так, как будто было проблемой смешивать модули es6 и cjs в сборке веб-пакета, если на модуль es6 можно ссылаться (транзитивно) через модуль es6 и cjs.

Интересно, правда ли это как общее утверждение? Если это так, то это означает, что я (и, возможно, другие пользователи веб-пакетов) должен будет детально понять цепочку зависимостей используемых модулей, а также природу (es6 vs cjs) каждого модуля в цепочке.

Есть ли какой-либо способ в веб-пакете, чтобы избежать повторного включения модулей?

...