8
我在React中使用Webpack的代码分割功能。我正在构建一个应用程序,用户将在其中选择一个选项,并且相应的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();
});
}
这是在浏览器中发生的事情,对不对?如果是这样,还没有'需要'已经被Babel转换了,所以不能动态改变?而你的硬编码字符串将被成功地转换。 – Benjamin
@ Benjamin-它是一个变量 - 它不会传递给硬代码字符串。我希望它能像任何其他js变量一样工作。 – Steph
**'ContextReplacementPlugin' **将为您解决方案https://github.com/webpack/webpack/issues/118 – Everettss