私CommonsChunkPluginは、すべてのエントリポイントを調べ、それらの間に共通のパッケージ/依存関係があるかどうかを確認し、それらを独自のバンドルに分離するという一般的な要点を理解しています。
したがって、次の構成があると仮定します。
...
enrty : {
entry1 : 'entry1.js', //which has 'jquery' as a dependency
entry2 : 'entry2.js', //which has 'jquery as a dependency
vendors : [
'jquery',
'some_jquery_plugin' //which has 'jquery' as a dependency
]
},
output: {
path: PATHS.build,
filename: '[name].bundle.js'
}
...
使用せずにバンドルした場合 CommonsChunkPlugin
最終的に3つの新しいバンドルファイルが作成されます。
entry1.bundle.jsそこから完全なコードが含まれているentry1.jsとjqueryし、独自のランタイムが含まれていますentry2.bundle.jsそこから完全なコードが含まれているentry2.jsとjqueryし、独自のランタイムが含まれていますvendors.bundle.jsそこから完全なコードが含まれているjqueryとsome_jquery_pluginし、独自のランタイムが含まれています
これは明らかに悪いことjqueryです。ページに3回読み込まれる可能性があるため、これは望ましくありません。
を使用してバンドルする場合 CommonsChunkPlugin
CommonsChunkPlugin次のいずれかに渡す引数に応じて、次のいずれかになります。
ケース1:合格
{ name : 'commons' }すると、次のバンドルファイルが作成されます。entry1.bundle.jsそこから完全なコードが含まentry1.jsための要件を、jqueryおよびランタイムが含まれていませんentry2.bundle.jsそこから完全なコードが含まentry2.jsための要件を、jqueryおよびランタイムが含まれていませんvendors.bundle.jsそこから完全なコードが含まsome_jquery_pluginための要件を、jqueryおよびランタイムが含まれていませんcommons.bundle.jsからの完全なコードjqueryとランタイムが含まれています
このようにして、全体的にいくつかの小さなバンドルになり、ランタイムは
commonsバンドルに含まれます。かなり大丈夫ですが、理想的ではありません。ケース2:合格
{ name : 'vendors' }すると、次のバンドルファイルが作成されます。entry1.bundle.jsそこから完全なコードが含まentry1.jsための要件を、jqueryおよびランタイムが含まれていませんentry2.bundle.jsそこから完全なコードが含まentry2.jsための要件を、jqueryおよびランタイムが含まれていませんvendors.bundle.jsこれには、jqueryおよびからの完全なコードsome_jquery_pluginが含まれ、ランタイムが含まれます。
このようにして、全体的にいくつかの小さなバンドルになりますが、ランタイムは
vendorsバンドルに含まれるようになりました。ランタイムがvendorsバンドルに含まれているため、前のケースよりも少し悪化しています。ケース3:合格
{ names : ['vendors', 'manifest'] }すると、次のバンドルファイルが作成されます。entry1.bundle.jsそこから完全なコードが含まentry1.jsための要件を、jqueryおよびランタイムが含まれていませんentry2.bundle.jsそこから完全なコードが含まentry2.jsための要件を、jqueryおよびランタイムが含まれていませんvendors.bundle.jsそこから完全なコードが含まれているjqueryとsome_jquery_pluginし、ランタイムが含まれていませんmanifest.bundle.jsこれには、他のすべてのバンドルの要件とランタイムが含まれています
このようにして、全体的にいくつかの小さなバンドルになり、ランタイムは
manifestバンドルに含まれます。これは理想的なケースです。
わからないこと/わからない
ではCASE 2なぜ私たちは、で終わるんでした
vendors(一般的なコードの両方を含むバンドルjquery)とから残ったものは何でもvendors(エントリーsome_jquery_plugin)?私の理解では、CommonsChunkPluginここで行ったことは、共通コード(jquery)を収集し、それをvendorsバンドルに出力するように強制したため、共通コードをvendorsバンドルに「マージ」したことです(現在は、からのコードのみが含まれています)。some_jquery_plugin)。確認または説明してください。ではCASE 3私たちは渡されたときに何が起こったのか理解していない
{ names : ['vendors', 'manifest'] }プラグインに。なぜ/どのようにされたvendorsバンドルは両方を含む、そのまま保持jqueryとsome_jquery_pluginするとき、jquery明らかに一般的な依存関係で、なぜ生成されたmanifest.bundle.jsファイルは、それが作成された方法を作成し(他のすべてのバンドルを必要とランタイムを含みますか)?