å¨è¿å»ï¼webpack æå æ¶çä¸ä¸ªæè¡¡æ¯ï¼æå ä¸çæ¯ä¸ªæ¨¡åé½ä¼è¢«å 裹å¨åç¬ç彿°éå ä¸ãè¿äºå 裹ç彿°ä½¿å¾ JavaScript 卿µè§å¨ä¸æ§è¡éåº¦åæ ¢ãç¸æ¯ä¹ä¸ï¼å Closure Compiler å RollupJS è¿æ ·çå·¥å ·ä¼å°æææ¨¡åçä½ç¨åâæåâæåå¹¶å°ä¸ä¸ªéå ä¸ï¼ä»è使å¾ä»£ç 卿µè§å¨ä¸æ§è¡é度æ´å¿«ã
æ¤æä»¶å°å¨ webpack ä¸å¯ç¨ç¸åçåå¹¶è¡ä¸ºãé»è®¤æ
åµä¸ï¼æ¤æä»¶å¨ çäº§æ¨¡å¼ ä¸å·²å¯ç¨ï¼å¨å
¶ä»æ
åµä¸åç¦ç¨ãå° optimization.concatenateModules é项 设置为 false å³å¯è¦çå¨ç产模å¼ä¸çé»è®¤ä¼åãæå¨æ·»å ModuleConcatenationPlugin æä½¿ç¨ optimization.concatenateModules é项å¯ä»¥å¨å
¶ä»æ¨¡å¼ä¸å¯ç¨åå¹¶è¡ä¸ºï¼
new webpack.optimize.ModuleConcatenationPlugin();è¿ç§åå¹¶è¡ä¸ºè¢«ç§°ä¸ºâä½ç¨åæåâã
ä½ç¨åæåæ¯ ECMAScript 模åè¯æ³ç¹å«æ¯æçä¸ä¸ªåè½ãå æ¤ï¼webpack å¯è½ä¼æ ¹æ®ä½¿ç¨ç模åç±»åå å ¶ä»æ¡ä»¶ åéå°æ®éçæå æ¹å¼ã
æ£å¦æç« æè§£éçï¼webpack å°è¯å®ç°é¨åä½ç¨åæåãå®ä¼å°æ¨¡ååå¹¶å°ä¸ä¸ªåä¸çä½ç¨åä¸ï¼ä½å¹¶éå¨æææ åµä¸é½è½åå°ã妿 webpack æ æ³åå¹¶ä¸ä¸ªæ¨¡åï¼åæä¸¤ç§æ¿ä»£æ¹æ¡ï¼é»æ¢ä¸å建æ°ç»ã黿¢æå³ç该模åå¿ é¡»å¨èªå·±çä½ç¨åä¸ï¼å建æ°ç»æå³çä¼å建ä¸ä¸ªæ°ç模åç»ã以䏿¡ä»¶å³å®äºä¸åçè¾åºï¼
| æ¡ä»¶ | è¾åº |
|---|---|
| 没æ ES6 模å | 黿¢ |
| ä»éå¯¼å ¥å¯¼å ¥ | å建æ°ç» |
| ä»å ¶ä» chunk å¯¼å ¥ | å建æ°ç» |
| è¢«å ¶ä»å¤ä¸ªæ¨¡ååç»å¯¼å ¥ | å建æ°ç» |
ä» import() è¯æ³å¯¼å
¥ | å建æ°ç» |
å ProvidePlugin å½±åæä½¿ç¨ module | 黿¢ |
| æ¥å HMR | å建æ°ç» |
ä½¿ç¨ eval() | 黿¢ |
| å¨å¤ä¸ª chunk ä¸ | 黿¢ |
export * from "cjs-module" | 黿¢ |
ä¸é¢ç伪 JavaScript 代ç è§£éäºè¯¥ç®æ³ï¼
modules.forEach((module) => {
const group = new ModuleGroup({
root: module,
});
module.dependencies.forEach((dependency) => {
tryToAdd(group, dependency);
});
if (group.modules.length > 1) {
orderedModules = topologicalSort(group.modules);
concatenatedModule = new ConcatenatedModule(orderedModules);
chunk.add(concatenatedModule);
orderedModules.forEach((groupModule) => {
chunk.remove(groupModule);
});
}
});
function tryToAdd(group, module) {
if (group.has(module)) {
return true;
}
if (!hasPreconditions(module)) {
return false;
}
const nextGroup = group;
const result = module.dependents.reduce((check, dependent) => {
return check && tryToAdd(nextGroup, dependent);
}, true);
if (!result) {
return false;
}
module.dependencies.forEach((dependency) => {
tryToAdd(group, dependency);
});
group.merge(nextGroup);
return true;
}å¦æä½¿ç¨çæ¯ webpack CLIï¼ä½¿ç¨ --stats-optimization-bailout æ å¿å°æ¾ç¤ºåºç° bailout çåå ï¼å¦æä½¿ç¨çæ¯ webpack é
ç½®ï¼åéè¦å stats 对象添å 以ä¸å
容ï¼
module.exports = {
//â¦â¦
stats: {
// æ¤é
ç½®å°æ¾ç¤ºåºç° bailout çåå
optimizationBailout: true,
},
};