私は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();
});
}
をこれは右、ブラウザ内で起こっているのでしょうか?もしそうならば、すでに「必要とされていない」バベルによってすでに蒸散されていないので、動的に変更することはできませんか?あなたのハードコーディングされた文字列は正常に蒸散されていました。 – Benjamin
@ Benjamin-これは変数です。ハードコード文字列に変換されません。私は他の変数と同じように動作すると期待しています。 – Steph
** 'ContextReplacementPlugin' **はあなたのための解決策になりますhttps://github.com/webpack/webpack/issues/118 – Everettss