Webpack require.ensure с динамическим строковым путем

Мне нужно динамически запрашивать модули для асинхронной загрузки с помощью веб-пакета. Моя цель - пройти через массив и загрузить эти модули (это для моих целей реактивного маршрутизатора, здесь не важно).

Это мой код:

const arr = ['some-module', 'module-2'];
arr.map(moduleName => {
  require.ensure([], require => {
    if(process.env.IS_BROWSER) { //for react server-render because of babel 6
      cb(null, require(moduleName));
    }
    else {
      cb(null, require(moduleName).default);
    }
  });
}

На сервере работает хорошо, но на фронтенде дополнительные бандлы не делаются и не загружаются. Вы знаете, как это решить? Спасибо.


person user3696212    schedule 01.12.2016    source источник


Ответы (1)


Как вы, возможно, знаете, Webpack является сборщиком статических модулей, поэтому все модули должны разрешаться статически. Он не поддерживает разрешение выражений активов, которые являются полностью динамическими.

Он может статически разрешать некоторые динамические выражения, например

var a = 'a';
require.ensure([], function (require) {
   // all dynamic entry modules inside /dynamic/ folder
   console.log(require('./dynamic/' + a));
});

Если вы хотите сгенерировать один фрагмент для каждого модуля, вы можете использовать require.context в сочетании с загрузчиком пакетов.

var a = './a';
require.context('bundle!./app')(a)(function(moduleTest){
    console.log(moduleTest);
});
person Thaadikkaaran    schedule 01.12.2016