Я использую функцию разделения кода Webpack в React. Я создаю приложение, в котором пользователь выберет опцию, и соответствующий компонент React отобразит. Однако я обнаружил, что использование CommonJs require.ensure
работает только с жестко закодированными строками. Когда я использую переменные, кажется, что он работает, компоненты выключаются. Но когда я смотрю на вкладку в сети, я вижу, что он не разбивает код - он не загружает новые пакеты. Где, когда я жестко программирую, каждый раз возникает вызов для нового пакета.Разделение кода динамическими модулями?
Вот что работает:
executeDynamic(component){
var that = this;
switch(component){
case 'SolidButton':
require.ensure([], function(require){
DynamicModule = require(`./elements/SolidButton/index.js`);
that.forceUpdate();
});
break;
case 'ThreeDButton':
require.ensure([], function(require){
DynamicModule = require(`./elements/ThreeDButton/index.js`);
that.forceUpdate();
});
break;
case 'NoPreview':
require.ensure([], function(require){
DynamicModule = require(`./elements/NoPreview/index.js`);
that.forceUpdate();
});
break;
default:
break;
}
}
Вот что я хочу работать:
executeDynamic(component){
var that = this;
require.ensure([], function(require) {
DynamicModule = require(`./elements/${component}/index.js`);
that.forceUpdate();
});
}
Это происходит в браузере, не так ли? Если это так, не «потребовал», он уже был перекован Бабелем и поэтому не может быть динамически изменен? В то время как ваши жестко закодированные строки были бы успешно завершены. – Benjamin
@ Benjamin - это переменная - она не переводится в жесткие строки кода. Я ожидаю, что он будет работать как любая другая переменная js. – Steph
** 'ContextReplacementPlugin' ** будет решением для вас https://github.com/webpack/webpack/issues/118 – Everettss