CommonsChunkPluginTüm giriş noktalarına bakmanın, aralarında ortak paketler / bağımlılıklar olup olmadığını kontrol edip bunları kendi paketlerine ayırdığına dair genel bir fikir anlıyorum.
Öyleyse, aşağıdaki yapılandırmaya sahip olduğumu varsayalım:
...
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'
}
...
Kullanmadan paketlersem CommonsChunkPlugin
Sonunda 3 yeni paket dosyası elde edeceğim:
entry1.bundle.jshangi komple kodu içerenentry1.jsvejquerykendi çalışma zamanını içerenentry2.bundle.jshangi komple kodu içerenentry2.jsvejquerykendi çalışma zamanını içerenvendors.bundle.jshangi komple kodu içerenjqueryvesome_jquery_pluginkendi çalışma zamanını içeren
Bu açıkça kötü çünkü jquerysayfada potansiyel olarak 3 kez yükleyeceğim , bu yüzden bunu istemiyoruz.
Kullanarak paketlersem CommonsChunkPlugin
CommonsChunkPluginAşağıdakilerden herhangi birine aktardığım argümanlara bağlı olarak :
DURUM 1: Ben geçerseniz
{ name : 'commons' }aşağıdaki paket dosyaları ile sona erecek:entry1.bundle.jstam kodu içeren, çalışma zamanıentry1.jsiçin bir gereksinim olanjqueryve içermeyenentry2.bundle.jstam kodu içeren, çalışma zamanıentry2.jsiçin bir gereksinim olanjqueryve içermeyenvendors.bundle.jstam kodu içeren, çalışma zamanısome_jquery_pluginiçin bir gereksinim olanjqueryve içermeyencommons.bundle.jstam kodujqueryiçeren ve çalışma zamanını içeren
Bu şekilde, genel olarak bazı daha küçük paketler elde ederiz ve çalışma zamanı
commonspakette yer alır. Oldukça iyi ama ideal değil.DURUM 2: Ben geçerseniz
{ name : 'vendors' }aşağıdaki paket dosyaları ile sona erecek:entry1.bundle.jstam kodu içeren, çalışma zamanıentry1.jsiçin bir gereksinim olanjqueryve içermeyenentry2.bundle.jstam kodu içeren, çalışma zamanıentry2.jsiçin bir gereksinim olanjqueryve içermeyenvendors.bundle.jsçalışma zamanından gelenjqueryve içeren tam kodusome_jquery_pluginiçeren.
Bu şekilde, yine genel olarak bazı daha küçük paketlerle sonuçlanırız, ancak çalışma zamanı artık
vendorspakette yer almaktadır. Önceki durumdan biraz daha kötü çünkü çalışma zamanı artıkvendorspakette.DURUM 3: Ben geçerseniz
{ names : ['vendors', 'manifest'] }aşağıdaki paket dosyaları ile sona erecek:entry1.bundle.jstam kodu içeren, çalışma zamanıentry1.jsiçin bir gereksinim olanjqueryve içermeyenentry2.bundle.jstam kodu içeren, çalışma zamanıentry2.jsiçin bir gereksinim olanjqueryve içermeyenvendors.bundle.jshangi komple kodu içerenjqueryvesome_jquery_pluginve çalışma zamanını içermiyormanifest.bundle.jsdiğer tüm paketler için gereksinimleri ve çalışma zamanını içeren
Bu şekilde, genel olarak bazı daha küçük paketler elde ederiz ve çalışma zamanı
manifestpakette yer alır. Bu ideal durumdur.
Ne anlamıyorum / anladığımdan emin değilim
In HALİNDE 2 neden olan düştün
vendorshem ortak kod (içeren paketjquerykalma neyse) vevendorsgirişe (some_jquery_plugin)? Anladığım kadarıyla,CommonsChunkPluginburada yaptığı şey, ortak kodu (jquery)vendorstoplamasıydı ve onu pakete çıkarmaya zorladığımızdan, ortak kodu pakete bir tür "birleştirdi"vendors(şimdi yalnızcasome_jquery_plugin). Lütfen onaylayın veya açıklayın.In HALİNDE 3 Bence geçti ne oldu anlamıyorum
{ names : ['vendors', 'manifest'] }eklentisi için.vendorsPaket neden / nasıl bozulmadan tutuldu, her ikisini de içeriyorjqueryvesome_jquery_pluginne zamanjqueryaçıkça ortak bir bağımlılıktır ve oluşturulanmanifest.bundle.jsdosya neden oluşturulduğu şekilde oluşturuldu (diğer tüm paketleri gerektiriyor ve çalışma zamanını içeriyor)?