मुझे सामान्य जानकारी मिलती है कि 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फ़ाइल को जिस तरह से बनाया गया था (अन्य सभी बंडलों की आवश्यकता और रनटाइम युक्त) क्यों बनाया गया था?