Как добавить динамические требования как внешние? - PullRequest
0 голосов
/ 04 октября 2018

У меня есть 40+ файлов перевода json, которые я хочу динамически запрашивать, например:

require(`./assets/locales/${lang}.json`)

Поскольку webpack не может определить путь во время компиляции, он загрузит каждый файл в каталоге (как объяснено здесь ).Я не хочу, чтобы веб-пакет связывал эти файлы в вывод .js, поэтому я добавил конфигурацию externals, например:

externals: [ 
    /assets\/locales\/.*\.json/i, 
    /assets\/locales\//i
],

Проблема в том, что веб-пакет не будет учитывать конфигурацию externalsс динамическим требованием.Это работает для нединамических требований, таких как:

require(`./assets/locales/en-us.json`)
require(`./assets/locales/pt-pt.json`)

Но я не хочу добавлять более 40 строк, подобных этой, в мой код ... Я хочу, чтобы всеэти .json файлы как внешние зависимости, и могут быть динамически требовать их.

Есть ли способ достичь того, чего я хочу?Я заглянул в ContextReplacementPlugin , но, похоже, в этом случае он мне не помог.Если я использую IgnorePlugin , я не могу загрузить файлы json.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Решено!Когда веб-пакет находит запрос с выражением, он импортирует все файлы в каталоге .В этих ситуациях webpack не сопоставляет externals со строкой или регулярным выражением.Это работает, однако, если мы используем функцию в нашем externals определении.

Вот как это получилось:

externals: [
    function (context, request, callback) {
        if (/assets\/locales$/i.test(context)) {
            return callback(null, './assets/locales/' + request);
        }
        callback();
    }
]

I, может быть, есть лучшее решение, возможно, этоэто ошибка веб-пакета ... Если у кого-то есть идея получше, я открыт для нее.

0 голосов
/ 04 октября 2018

Вы можете использовать require.context следующим образом:

require.context('./assets/locales/', false, /\.json$/);

Вы можете создать свой собственный контекст с функцией require.context ().

Он позволяет передавать каталог для поиска, флаг, указывающий, следует ли искать и в подкаталогах, и регулярное выражение для сопоставления файлов с.

веб-пакет анализирует для require.context () в коде при сборке.

Если вы предпочитаете узел, для этого есть пакет .Дайте мне знать, если это работает.:)

...