मुझे सामान्य जानकारी मिलती है कि 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
बंडल में समाहित होता है। यह आदर्श मामला है।
जो मुझे समझ में नहीं आता / मुझे यकीन नहीं है कि मैं समझ रहा हूं
में मामला 2 कारण है कि हम अंत था
vendors
दोनों आम कोड (युक्त बंडलjquery
) और जो कुछ भी से बनीvendors
प्रविष्टि (some_jquery_plugin
)? मेरी समझ से,CommonsChunkPlugin
यहाँ जो किया गया वह यह था कि यह कॉमन कोड (jquery
) इकट्ठा था , और जब से हमने इसेvendors
बंडल में आउटपुट करने के लिए मजबूर किया , तो इसने कॉमन कोड कोvendors
बंडल में "मर्ज" कर दिया (जिसमें अब केवल कोड शामिल था।some_jquery_plugin
)। कृपया पुष्टि करें या व्याख्या करें।में मामला 3 मुझे समझ नहीं आता कि क्या हुआ जब हम पारित कर दिया
{ names : ['vendors', 'manifest'] }
प्लगइन करने के लिए। क्यों / कैसेvendors
बंडल को बरकरार रखा गया था, जिसमें दोनों शामिल हैं ,jquery
औरsome_jquery_plugin
जबjquery
स्पष्ट रूप से एक सामान्य निर्भरता है, और उत्पन्नmanifest.bundle.js
फ़ाइल को जिस तरह से बनाया गया था (अन्य सभी बंडलों की आवश्यकता और रनटाइम युक्त) क्यों बनाया गया था?