私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
ファイルは、それが作成された方法を作成し(他のすべてのバンドルを必要とランタイムを含みますか)?