2017-08-28 12 views
8

私のバンドルファイルの中には、異なるバージョンをビルドしたいと考えています。Webpack:エントリポイントごとに異なる(プラグイン定義)設定

DefinePluginは通常、この種のもののために使用されているようだが、if-loaderまたは利用可能ifdef-loaderようにローダーもあります。

ここで問題は、すべてがすべてのエントリポイント間で設定を共有しているように見えることです。さまざまなエントリポイントに異なる設定({with_admin_mode: true}{with_admin_mode: false}など)を設定する方法が必要です。

実際のエントリポイントJSファイルの先頭に設定を入れていますが、検出されるすべてのモジュールでグローバル変数を正しく作成する方法がわかりません。true == falseと削除されています。

答えて

0

webpack-merge - スマートマージあなたのケースを解決するのに役立つはずです。

これは、特定のエントリポイント、プラグイン、およびenvのいくつかの変数に依存する必要があるものを動的に設定するのに役立ちます。

構成を異なるファイルに分割することをお勧めします。 すべてのエントリポイントで同じものを使用していくつかの共通設定を行うことができます(ローダーなど)。with_admin_modewithout_admin_nodeモードのカスタム設定を行うことができます。

+0

私はそれを得ていません。私は複数の設定をしなければならないことを示唆していますか?これは、私が避けたかったのは、多くの設定を共有している可能性があり、おそらくCommonsChunkPluginを壊すからです。 – AndreKR

0

申し訳ありません、私は、definePluginではなく、providePluginを記述することを意図していました。 DefinePluginはコード内の変数を直接置き換え、グローバルを作成しません。あなたのWebPACKの設定で

あなたが作成したモジュールファイルからグローバルコンフィギュレーション変数を設定するprovidePluginを使用することができます

plugins: [ 
    new webpack.ProvidePlugin({ 
    'config': 'config' 
    }) 
    ... 
], 
resolve: { 
    alias: { 'config': path.resolve(__dirname, './config') }, 
    extensions: ['.js'] 
} 

configは輸出にグローバルとして設定されます。 config.jsファイルの

これで、さまざまなエントリポイントでこのグローバルにアクセスして変更できます。たとえば、entry1.jsにはconfig.with_admin_mode = true;、entry2.jsにはconfig.with_admin_mode = false;を使用できます。

別の解決策は、モジュールのウィンドウから直接グローバル変数を設定することです。 window.with_admin_mode = true;

+0

これを10回読んだ後、私はまだあなたが意味することを理解していません。詳しく教えてください。 – AndreKR

+0

明確にするために編集します – JusMalcolm

+0

私はこれを試しても動作しません。同じファイルに 'config.with_admin_mode = false;'と 'if(config.with_admin_mode === true)'を入れても 'if'ブロックは'!0 === t.with_admin_mode && console.log( "foo") 'は削除されません。 – AndreKR

関連する問題