DllPlugin å DllReferencePlugin ç¨æç§æ¹æ³å®ç°äºæå bundlesï¼åæ¶è¿å¤§å¹
度æåäºæå»ºçé度ã"DLL" ä¸è¯ä»£è¡¨å¾®è½¯æåå¼å
¥ç卿龿¥åºã
æ¤æä»¶ç¨äºå¨åç¬ç webpack é
ç½®ä¸å建ä¸ä¸ª dll-only-bundleã æ¤æä»¶ä¼çæä¸ä¸ªå为 manifest.json çæä»¶ï¼è¿ä¸ªæä»¶æ¯ç¨äºè®© DllReferencePlugin è½å¤æ å°å°ç¸åºçä¾èµä¸ã
contextï¼å¯éï¼ï¼ manifest æä»¶ä¸è¯·æ±ç context (é»è®¤å¼ä¸º webpack ç context)format (boolean = false)ï¼å¦æä¸º trueï¼å manifest json æä»¶ (è¾åºæä»¶) å°è¢«æ ¼å¼åãnameï¼æ´é²åºç DLL ç彿°åï¼TemplatePathsï¼[fullhash] & [name] ï¼pathï¼manifest.json æä»¶ç ç»å¯¹è·¯å¾ï¼è¾åºæä»¶ï¼entryOnly (boolean = true)ï¼å¦æä¸º trueï¼åä»
æ´é²å
¥å£typeï¼dll bundle çç±»ånew webpack.DllPlugin(options);å¨ç»å®ç path è·¯å¾ä¸å建ä¸ä¸ª manifest.json æä»¶ãè¿ä¸ªæä»¶å
å«äºä» require å import ä¸ request å°æ¨¡å id çæ å°ã DllReferencePlugin ä¹ä¼ç¨å°è¿ä¸ªæä»¶ã
æ¤æä»¶ä¸ output.library çé项ç¸ç»åå¯ä»¥æ´é²åºï¼ä¹ç§°ä¸ºæ¾å
¥å
¨å±ä½ç¨åï¼dll 彿°ã
æ¤æä»¶é ç½®å¨ webpack ç主é ç½®æä»¶ä¸ï¼æ¤æä»¶ä¼æ dll-only-bundles å¼ç¨å°éè¦çé¢ç¼è¯çä¾èµä¸ã
contextï¼ï¼ç»å¯¹è·¯å¾ï¼ manifest (æè
æ¯å
容屿§)ä¸è¯·æ±çä¸ä¸æextensionsï¼ç¨äºè§£æ dll bundle 䏿¨¡åçæ©å±å (ä»
å¨ä½¿ç¨ 'scope' æ¶ä½¿ç¨)ãmanifest ï¼å
å« content å name çå¯¹è±¡ï¼æè
æ¯ä¸ä¸ªå符串 ââ ç¼è¯æ¶ç¨äºå è½½ JSON manifest çç»å¯¹è·¯å¾content (å¯é)ï¼ è¯·æ±å°æ¨¡å id çæ å°ï¼é»è®¤å¼ä¸º manifest.contentï¼name (å¯é)ï¼dll æ´é²å°æ¹çåç§°ï¼é»è®¤å¼ä¸º manifest.nameï¼ï¼å¯åèexternalsï¼scope (å¯é)ï¼dll ä¸å
容çåç¼sourceType (å¯é)ï¼dll æ¯å¦ä½æ´é²ç (libraryTarget)new webpack.DllReferencePlugin(options);éè¿å¼ç¨ dll ç manifest æä»¶æ¥æä¾èµçåç§°æ å°å°æ¨¡åç id ä¸ï¼ä¹ååå¨éè¦çæ¶åéè¿å
ç½®ç __webpack_require__ 彿°æ¥ require 对åºç模å
è¿ä¸ªæä»¶æ¯æä¸¤ç§æ¨¡å¼ï¼å嫿¯ä½ç¨åï¼scopedï¼åæ å°ï¼mappedï¼ã
dll ä¸çå
容å¯ä»¥ä½¿ç¨æ¨¡ååç¼çæ¹å¼å¼ç¨ï¼ä¸¾ä¾æ¥è¯´ï¼è®¾ç½® scope = 'xyz'ï¼è¿ä¸ª dll ä¸çå为 abc çæä»¶å¯ä»¥éè¿ require('xyz/abc') æ¥è·åã
dll ä¸çå
容ä¼è¢«æ å°å°å½åç®å½ä¸ãå¦æè¢« require çæä»¶ä¸ dll ä¸çæä¸ªæä»¶å¹é
ï¼è§£æä¹åï¼ï¼é£ä¹è¿ä¸ª dll ä¸çæä»¶å°±ä¼è¢«ä½¿ç¨ã
ç±äºè¿æ¯å¨è§£æäº dll 䏿¯ä¸ªæä»¶ä¹åæè§¦åçï¼å æ¤ç¸åçè·¯å¾å¿
é¡»è½å¤ç¡®ä¿è¿ä¸ª dll bundle ç使ç¨è
ï¼ä¸ä¸å®æ¯äººï¼å¯ææäºä»£ç ï¼ææé访é®ã 䏾便¥è¯´ï¼ åå¦ä¸ä¸ª dll bundle ä¸å«æ loadash åºä»¥åæä»¶ abcï¼ é£ä¹ require("lodash") å require("./abc") é½ä¸ä¼è¢«ç¼è¯è¿ä¸» bundle æä»¶ä¸ï¼èæ¯ä¼è¢« dll æä½¿ç¨ã
webpack.vendor.config.js
const path = require('path');
new webpack.DllPlugin({
context: __dirname,
name: '[name]_[fullhash]',
path: path.join(__dirname, 'manifest.json'),
});webpack.app.config.js
new webpack.DllReferencePlugin({
context: __dirname,
manifest: require('./manifest.json'),
scope: 'xyz',
sourceType: 'commonjs2',
});两个åç¬çç¨ä¾ï¼ç¨æ¥å嫿¼ç¤ºä½ç¨åï¼scopeï¼åä¸ä¸æï¼contextï¼ã