ModuleConcatenationPlugin
과거ì ë²ë¤ë§ì í ë webpackì ì ì¶©ì ì¤ íëë ë²ë¤ì ê° ëª¨ëì´ ê°ë³ í¨ì í´ë¡ì ì ìí´ ëíëë¤ë ì ì´ììµëë¤. ì´ë¬í ëí¼ í¨ìë ë¸ë¼ì°ì ìì ìë°ì¤í¬ë¦½í¸ì ì¤íì ëë¦¬ê² ë§ë¤ììµëë¤. ì´ì ë¬ë¦¬, Closure Comilerì RollupJSì ê°ì ë구ë 모ë 모ëì íëì í´ë¡ì ë¡ í¸ì´ì¤í íê±°ë ì°ê²°íì¬ ì½ëê° ë¸ë¼ì°ì ìì ë ë¹ ë¥¸ ì¤í ìê°ì ê°ê² íìµëë¤.
ì´ íë¬ê·¸ì¸ì ìì ë´ì©ê³¼ ê°ì ì°ê²° ëìì´ webpackìì ê°ë¥íê² í´ì¤ëë¤. 기본ì ì¼ë¡ ì´ íë¬ê·¸ì¸ì production modeììë ì´ë¯¸ ê°ë¥íê³ ë머ì§ììë ìì§ ê°ë¥íì§ ììµëë¤. ë§ì½ ìì° mode ìµì í를 무í¨ë¡ í´ì¼ íë ê²½ì°, optimization.concatenateModules ìµì
ì falseë¡ ì¤ì íì¸ì. ë¤ë¥¸ 모ëìì ì°ê²° ëìì ê°ë¥íê² íê³ ì¶ì ê²½ì°, ModuleConcatenationPluginì ìëì¼ë¡ ì¤ì íê±°ë optimization.concatenateModules ìµì
ì ì¬ì©íì¸ì.
new webpack.optimize.ModuleConcatenationPlugin();ì´ ì°ê²° ëìì âë²ì í¸ì´ì¤í â ì´ë¼ê³ ë¶ë¦½ëë¤.
ë²ì í¸ì´ì¤í ì í¹ë³í ECMAScript Module 문ë²ìì ì¬ì© ê°ë¥íëë¡ ë§ë¤ì´ì§ ííì ëë¤. ì´ë¡ ì¸í´ webpackì íì¬ ì¬ì© ì¤ì¸ 모ëì ì¢ ë¥ì ë¤ë¥¸ ì¬ë¬ ì¡°ê±´ì ë°ë¼ íë²í ë²ë¤ë§ì¼ë¡ í´íí ìë ììµëë¤.
Optimization Bailouts
ê¸ìì ì¤ëª íë¯ì´ webpackì ë¶ë¶ì ì¸ ë²ì í¸ì´ì¤í ì ìëí©ëë¤. ì´ë 모ëì íëì ë²ìë¡ í©ì¹ì§ë§ 모ë ê²½ì°ì í©ì¹ì§ë 못í©ëë¤. ë§ì½ webapckì´ ëª¨ëì í©ì¹ ì ìë¤ë©´ ë ê°ì§ ëìì Preventì Root ì ëë¤. Preventë 모ëì´ ë°ëì ê·¸ ìì ì ë²ì ìì ìì´ì¼ íë¤ë ê²ì ì미í©ëë¤. Rootë ìë¡ì´ 모ë ê·¸ë£¹ì´ ìì±ë ê²ì´ë¼ë ì미ì ëë¤. ë¤ìì ì¡°ê±´ì´ ê²°ê³¼ë¥¼ ê²°ì í©ëë¤.
| Condition | Outcome |
|---|---|
| Non ES6 Module | Prevent |
| Non Importë¡ ê°ì ¸ì´ | Root |
| ë¤ë¥¸ ì²í¬ìì ê°ì ¸ì´ | Root |
| ë¤ìì ë¤ë¥¸ 모ë 그룹ìì ê°ì ¸ì´ | Root |
import()ë¡ ê°ì ¸ì´ | Root |
ProvidePluginì ìí¥ì ë°ê±°ë module ì¬ì© | Prevent |
| HMR íì© | Root |
eval() ì¬ì© | Prevent |
| ë¤ìì ì²í¬ | Prevent |
| "cjs-module"ë¡ë¶í° * ë´ë³´ë´ê¸° | Prevent |
Module Grouping Algorithm
ìëì ìë°ì¤í¬ë¦½í¸ ìì¬ì½ëë ì´ ìê³ ë¦¬ì¦ì ì¤ëª í©ëë¤.
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) => check && tryToAdd(nextGroup, dependent),
true,
);
if (!result) {
return false;
}
for (const dependency of module.dependencies) {
tryToAdd(group, dependency);
}
group.merge(nextGroup);
return true;
}
for (const module of modules) {
const group = new ModuleGroup({
root: module,
});
for (const dependency of module.dependencies) {
tryToAdd(group, dependency);
}
if (group.modules.length > 1) {
orderedModules = topologicalSort(group.modules);
concatenatedModule = new ConcatenatedModule(orderedModules);
chunk.add(concatenatedModule);
for (const groupModule of orderedModules) {
chunk.remove(groupModule);
}
}
}Debugging Optimization Bailouts
webpack CLI를 ì¬ì©í ê²½ì° --stats-optimization-bailout íëê·¸ë bailout ìì¸ì ë³´ì¬ì¤ëë¤. webpack config를 ì¬ì©í ê²½ì° stats ê°ì²´ì ë¤ìì ì¶ê°íì¸ì.
export default {
// ...
stats: {
// Display bailout reasons
optimizationBailout: true,
},
};


