Как заставить Webpack распознавать динамический экспорт - PullRequest
0 голосов
/ 26 декабря 2018

Я вижу следующее предупреждение при сборке с Webpack v4 (используя babel-loader для файлов JS):

Warning in ./src/components/Foo
"export 'ADDENDUM' was not found in '../../types'
...

Импорт в ./src/components/Foo:

import { ADDENDUM } from '../../types';

.. / .. / types :

import { each } from 'lodash';

export const typesDict = {
  ADDENDUM: 'addendum',
};

each(typesDict, (type, typeConstant) => {
    exports[typeConstant] = type;
});

Это не вызывает ошибку сборки, только предупреждение.Это предупреждение неверно, так как я экспортирую ADDENDUM (хотя и динамически), и все работает как надо.

Есть ли способ для Webpack обработать этот динамический импорт или, по крайней мере, отключитьпредупреждение?Я обновляюсь с Webpack v1 прямо сейчас, и v1 не имеет этой проблемы (или, если это так, она каким-то образом скрыта).

Также, пожалуйста, обратите внимание: я НЕ хочу отключить все предупреждения Webpack, такие каккак через devServer config .Я просто хочу заставить замолчать это предупреждение одного типа.

1 Ответ

0 голосов
/ 28 декабря 2018

Исходя из вашего ../../types файла, я предполагаю, что ваш подход состоял в том, чтобы снова пропустить запись компонентов в объекте exports.

Вместо того чтобы отключить предупреждение, попробуйте что-нибудь попроще, чтобы решить проблему.Поскольку вы не хотите писать дважды одни и те же имена, посмотрите на мой пример.

Нет lodash требуется, циклы не используются и экспортированные константы записываются один раз.

.. / .. / types :

export const ADDENDUM = 'addendum';
export const ADDENDUM2 = 'addendum2';
export const ADDENDUM3 = 'addendum3';

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

ОБНОВЛЕНИЕ:

Ваш код действительно действителен, но при использовании динамического экспорта / импортакомпиляторы / компоновщики теряют трассировку вашего экспорта (в вашем случае), так как они не проверяют содержимое вашего объекта экспорта, таким образом, вы получаете предупреждение, потому что компилятор (babel) не нашел exports.ADDENDUM в вашем коде,только вы знаете, что он есть, поэтому компилятор считает, что вы используете несуществующий компонент.

Что касается импорта, то это та же история, тот же тип предупреждений выдается веб-пакетом, когдачто-то вроде require('/path/to/' + someVar + '/some.file.js'), потому что webpack хотел сделать из него кусок, но это был не полный путь для webpack, и он не смог найти файл, потому что это была сцепленная строка (динамический импорт).(Я не знаю, изменилось ли это с годами, но я уверен, что вы понимаете / прекрасно это знали)

...