Optimization
Webpackì ì íë 모ëì ë°ë¼ ìµì í를 ì¤íí기 ë문ì, ì¬ì í 모ë ìµì íë ìë êµ¬ì± ë° ì¬ì ìì ì¬ì©í ì ììµëë¤.
optimization.checkWasmTypes
boolean
WebAssembly 모ëì ê°ì ¸ì¤ê±°ë ë´ë³´ë¼ ë í¸íëì§ ìë ì íì WebAssembly 모ëì íì¸íëë¡ webpackì ì§ìí©ëë¤.
optimization.checkWasmTypesì 기본ê°ì modeì ë°ë¼ ë¤ë¦
ëë¤.
| 모ë | ê¸°ë³¸ê° |
|---|---|
"production" | true |
"development" | false |
"none" | false |
webpack.config.js
export default {
// ...
optimization: {
checkWasmTypes: false,
},
};optimization.chunkIds
boolean: false
string: 'natural' | 'named' | 'size' | 'total-size' | 'deterministic'
false: webpackì ë´ì¥ ì²í¬ ID ìê³ ë¦¬ì¦ì ë¹íì±íí©ëë¤.- ë¤ì ê° ì¤ íë:
'natural''named''size''total-size''deterministic'
Webpackìê² ì²í¬ IDì ì¬ì©í ìê³ ë¦¬ì¦ì ì§ì í©ëë¤. optimization.chunkIds를 falseë¡ ì¤ì íë©´ Webpackì ë´ì¥ ìê³ ë¦¬ì¦ì ì¬ì©íì§ ìê³ íë¬ê·¸ì¸ì íµí´ ì¬ì©ì ì§ì ìê³ ë¦¬ì¦ì ì ê³µíëë¡ ì§ìí©ëë¤. optimization.chunkIdsìë ëª ê°ì§ 기본ê°ì´ ììµëë¤.
optimization.chunkIdsì 기본ê°ì modeì ë°ë¼ ë¤ë¦
ëë¤.
| 모ë | ê¸°ë³¸ê° |
|---|---|
"production" | 'deterministic' |
"development" | 'named' |
"none" | 'natural' |
ë¤ì 문ìì´ ê°ì´ ì§ìë©ëë¤.
| ìµì | ì¤ëª |
|---|---|
'natural' | ì¬ì© ììì ë°ë¥¸ ì«ì IDì ëë¤. |
'named' | ëë²ê¹ ì ìí ìë³ ê°ë¥í IDì ëë¤. |
'deterministic' | ì»´íì¼ ê°ì ë³ê²½ëì§ ìë ì§§ì ì«ì IDì ëë¤. ì¥ê¸° ìºì±ì ì ì©í©ëë¤. íë¡ëì 모ëìì 기본ì¼ë¡ íì±íë©ëë¤. |
'size' | ìµì ì´ê¸° ë¤ì´ë¡ë í¬ê¸°ì ì´ì ì ë§ì¶ ì«ì IDì ëë¤. |
'total-size' | ìµì ì ì²´ ë¤ì´ë¡ë í¬ê¸°ì ì´ì ì ë§ì¶ ì«ì IDì ëë¤. |
webpack.config.js
export default {
// ...
optimization: {
chunkIds: "named",
},
};기본ì ì¼ë¡ optimization.chunkIdsê° 'deterministic'ì¼ë¡ ì¤ì ë ê²½ì° ìµì 3ì리 ì«ìê° ì¬ì©ë©ëë¤. 기본 ëìì ì¤ë²ë¼ì´ëíë ¤ë©´ optimization.chunkIds를 falseë¡ ì¤ì íê³ webpack.ids.DeterministicChunkIdsPluginì ì¬ì©íì¸ì.
webpack.config.js
export default {
// ...
optimization: {
chunkIds: false,
},
plugins: [
new webpack.ids.DeterministicChunkIdsPlugin({
maxLength: 5,
}),
],
};optimization.concatenateModules
boolean
ë¨ì¼ 모ëë¡ ìì íê² ì°ê²°í ì ìë 모ë ê·¸ëíì ì¸ê·¸ë¨¼í¸ë¥¼ ì°¾ìµëë¤. optimization.providedExports ë° optimization.usedExportsì ìì¡´í©ëë¤.
optimization.concatenateModulesì 기본ê°ì modeì ë°ë¼ ë¤ë¦
ëë¤.
| 모ë | ê¸°ë³¸ê° |
|---|---|
"production" | true |
"development" | false |
"none" | false |
webpack.config.js
export default {
// ...
optimization: {
concatenateModules: true,
},
};optimization.emitOnErrors
boolean
ì»´íì¼ ì¤ ì¤ë¥ê° ë°ìí ëë§ë¤ ì ì
ì ë´ë³´ë´ë ¤ë©´ optimization.emitOnErrors를 ì¬ì©íì¸ì. ì´ë ê² íë©´ ì¤ë¥ê° ìë ì ì
ì´ ë°©ì¶ë©ëë¤. ì¬ê°í ì¤ë¥ë ìì±ë ì½ëë¡ ë´ë³´ë´ì§ê³ ë°íìì ì¤ë¥ë¥¼ ë°ììíµëë¤.
optimization.emitOnErrorsì 기본ê°ì modeì ë°ë¼ ë¤ë¦
ëë¤.
| 모ë | ê¸°ë³¸ê° |
|---|---|
"production" | false |
"development" | true |
"none" | true |
webpack.config.js
export default {
// ...
optimization: {
emitOnErrors: true,
},
};optimization.avoidEntryIife
boolean
ì§ì
모ëì IIFEë¡ ê°ì¸ì¼ íë ê²½ì° optimization.avoidEntryIife를 ì¬ì©í´ IIFE ëíì í¼í ì ììµëë¤.(JavascriptModulesPluginìì "This entry needs to be wrapped in an IIFE because"를 ê²ìí´ë³´ì¸ì.) ì´ ì ê·¼ ë°©ìì JavaScript ìì§ì ì±ë¥ì ìµì ííê³ ESM ë¼ì´ë¸ë¬ë¦¬ ë¹ë ì í¸ë¦¬ ì
°ì´í¹ì ê°ë¥íê² í©ëë¤.
íì¬ optimization.avoidEntryIifeë ë¤ë¥¸ 모ëê³¼ í¨ê» ë¨ì¼ í목 모ëë§ ìµì íí ì ììµëë¤.
optimization.avoidEntryIifeì 기본ê°ì modeì ë°ë¼ ë¤ë¦
ëë¤.
| 모ë | ê¸°ë³¸ê° |
|---|---|
"production" | true |
"development" | false |
"none" | false |
webpack.config.js
export default {
// ...
optimization: {
avoidEntryIife: true,
},
};optimization.flagIncludedChunks
boolean
ë í° ì²í¬ê° ì´ë¯¸ ë¡ëë ê²½ì°, ë¤ë¥¸ ì²í¬ì íìì§í©ì¸ ì²í¬ë¥¼ ìë³íê³ ë í° ì²í¬ë§ì¼ë¡ ì¶©ë¶í ë íìì§í© ì²í¬ë¥¼ ë¤ì ë¡ëíì§ ìëë¡ íë그를 ì§ì í©ëë¤.
optimization.flagIncludedChunksì 기본ê°ì modeì ë°ë¼ ë¤ë¦
ëë¤.
| 모ë | ê¸°ë³¸ê° |
|---|---|
"production" | true |
"development" | false |
"none" | false |
webpack.config.js
export default {
// ...
optimization: {
flagIncludedChunks: true,
},
};optimization.innerGraph
boolean
optimization.innerGraphë ì¬ì©ëì§ ìì exportì ëí´ ë´ë¶ ê·¸ëí ë¶ìì ìíí ì§ë¥¼ ê²°ì í©ëë¤.
optimization.innerGraphì 기본ê°ì modeì ë°ë¼ ë¤ë¦
ëë¤.
| 모ë | ê¸°ë³¸ê° |
|---|---|
"production" | true |
"development" | false |
"none" | false |
webpack.config.js
export default {
// ...
optimization: {
innerGraph: false,
},
};optimization.mangleExports
boolean string: 'deterministic' | 'size'
optimization.mangleExports를 ì¬ì©íë©´ export ë§¹ê¸ë§ì ì ì´í ì ììµëë¤.
optimization.mangleExportsì 기본ê°ì modeì ë°ë¼ ë¤ë¦
ëë¤.
| 모ë | ê¸°ë³¸ê° |
|---|---|
"production" | true |
"development" | false |
"none" | false |
ë¤ì ê°ì´ ì§ìë©ëë¤.
| ìµì | ì¤ëª |
|---|---|
'size' | ì§§ì ì´ë¦(ë³´íµ ë¨ì¼ 문ì). ìµì ë¤ì´ë¡ë ì¬ì´ì¦ì ì´ì ì ë§ì¶¥ëë¤. |
'deterministic' | ì§§ì ì´ë¦(ë³´íµ ë ê°ì 문ì). export를 ì¶ê°íê±°ë ì ê±°í ëë ë³ê²½ëì§ ììµëë¤. ì¥ê¸° ìºì±ì ì ì©í©ëë¤. |
true | 'deterministic'ê³¼ ëì¼í©ëë¤. |
false | ìë ì´ë¦ì ì ì§í©ëë¤. ê°ë ì±ê³¼ ëë²ê¹ ì ì ì©í©ëë¤ |
webpack.config.js
export default {
// ...
optimization: {
mangleExports: true,
},
};optimization.mangleWasmImports
boolean = false
trueë¡ ì¤ì íë©´ import를 ì§§ì 문ìì´ë¡ ë³ê²½íì¬ WASM í¬ê¸°ë¥¼ ì¤ì
ëë¤. 모ë ë° export ì´ë¦ì´ ë§¹ê¸ë©ëë¤.
webpack.config.js
export default {
// ...
optimization: {
mangleWasmImports: true,
},
};optimization.mergeDuplicateChunks
boolean = true
ëì¼í 모ëì í¬í¨íë ì²í¬ë¥¼ ë³í©í©ëë¤. optimization.mergeDuplicateChunks를 falseë¡ ì¤ì íë©´ ì´ ìµì íê° ë¹íì±íë©ëë¤.
webpack.config.js
export default {
// ...
optimization: {
mergeDuplicateChunks: false,
},
};optimization.minimize
boolean
MinimizerPlugin ëë optimization.minimizerì ì§ì ë íë¬ê·¸ì¸ì ì¬ì©í´ ë²ë¤ì ìµìííëë¡ webpackì ì§ìí©ëë¤.
optimization.minimizeì 기본ê°ì modeì ë°ë¼ ë¤ë¦
ëë¤.
| 모ë | ê¸°ë³¸ê° |
|---|---|
"production" | true |
"development" | false |
"none" | false |
webpack.config.js
export default {
// ...
optimization: {
minimize: false,
},
};optimization.minimizer
[MinimizerPlugin] and/or [function (compiler)] or undefined | null | 0 | false | ""
íë ì´ìì ì¬ì©ì ì§ì MinimizerPlugin ì¸ì¤í´ì¤ ëë ë¤ë¥¸ minimizer를 ì ê³µí´ ê¸°ë³¸ minimizer를 ì¬ì ìí ì ììµëë¤. webpack 5.87.0ë¶í°ë falsy ê°ì ì¬ì©í´ í¹ì minimizer를 ì¡°ê±´ë¶ë¡ ë¹íì±íí ìë ììµëë¤.
webpack.config.js
import MinimizerPlugin from "minimizer-webpack-plugin";
export default {
optimization: {
minimizer: [
new MinimizerPlugin({
parallel: true,
minimizerOptions: {
// https://github.com/webpack/minimizer-webpack-plugin#minimizeroptions
},
}),
],
},
};ëë í¨ìë¡ ì ê³µí ì ììµëë¤.
import MinimizerPlugin from "minimizer-webpack-plugin";
export default {
optimization: {
minimizer: [
(compiler) => {
new MinimizerPlugin({
/* your config */
}).apply(compiler);
},
],
},
};기본ì ì¼ë¡ webpackì optimization.minimizer를 ë¤ì ê°ì¼ë¡ ì¤ì í©ëë¤.
import MinimizerPlugin from "minimizer-webpack-plugin";
const minimizer = [
{
apply: (compiler) => {
new MinimizerPlugin({
minimizerOptions: {
compress: {
passes: 2,
},
},
}).apply(compiler);
},
},
];optimization.minimizer를 ì¬ì©ì ì ìí ë 기본 ê°ì ì ì§íë ¤ë ê²½ì° '...'ë¡ ì ê·¼í ì ììµëë¤.
export default {
optimization: {
minimizer: [new CssMinimizer(), "..."],
},
};기본ì ì¼ë¡, '...'ì 기본 ì¤ì ê°ì ì ê·¼íë ì§ë¦ê¸¸ ì
ëë¤. ê·¸ë ì§ ìì¼ë©´ webpackì´ ì°ë¦¬ë¥¼ ìí´ ì¤ì í©ëë¤.
optimization.moduleIds
boolean: false string: 'natural' | 'named' | 'deterministic' | 'size'
모ë ID를 ì íí ë ì¬ì©í ìê³ ë¦¬ì¦ì ê²°ì í©ëë¤. optimization.moduleIds를 falseë¡ ì¤ì íë©´, íë¬ê·¸ì¸ì íµí´ ì¬ì©ì ì ì ìê³ ë¦¬ì¦ì´ ì ê³µë ì ìì¼ë¯ë¡ ë´ì¥ ìê³ ë¦¬ì¦ì ì¬ì©í´ìë ì ëë¤ê³ webpackì ì립ëë¤.
optimization.moduleIdsì 기본ê°ì modeì ë°ë¼ ë¤ë¦
ëë¤.
| 모ë | ê¸°ë³¸ê° |
|---|---|
"production" | 'deterministic' |
"development" | 'named' |
"none" | 'natural' |
ë¤ì 문ìì´ ê°ì´ ì§ìë©ëë¤.
| ìµì | ì¤ëª |
|---|---|
natural | ì¬ì© ììì ë°ë¥¸ ì«ì IDì ëë¤. |
named | ëë²ê¹ ì ìí ìë³ ê°ë¥í IDì ëë¤. |
deterministic | 모ë ì´ë¦ì ìì ì«ì ê°ì¼ë¡ í´ìí©ëë¤. |
size | ìµì ì´ê¸° ë¤ì´ë¡ë í¬ê¸°ì ì´ì ì ë§ì¶ ì«ì IDì ëë¤. |
webpack.config.js
export default {
// ...
optimization: {
moduleIds: "deterministic",
},
};deterministic ìµì
ì ì¥ê¸° ìºì±ì ì ì©íì§ë§, hashed ìµì
ì ë¹í´ ë²ë¤ í¬ê¸°ê° ë ììµëë¤. ì«ì ê°ì 길ì´ë ID ê³µê°ì ìµë 80%를 ì±ì°ëë¡ ì íë©ëë¤. 기본ì ì¼ë¡ optimization.moduleIdsê° deterministicì¼ë¡ ì¤ì ë ê²½ì° ìµì 3ì리 ì«ìê° ì¬ì©ë©ëë¤. 기본 ëìì ì¬ì ìíë ¤ë©´ optimization.moduleIds를 falseë¡ ì¤ì íê³ webpack.ids.DeterministicModuleIdsPluginì ì¬ì©íììì¤.
webpack.config.js
export default {
// ...
optimization: {
moduleIds: false,
},
plugins: [
new webpack.ids.DeterministicModuleIdsPlugin({
maxLength: 5,
}),
],
};optimization.nodeEnv
boolean: false string
webpackì´ process.env.NODE_ENV를 주ì´ì§ 문ìì´ ê°ì¼ë¡ ì¤ì íëë¡ í©ëë¤. optimization.nodeEnv를 falseë¡ ì¤ì íì§ ìë í DefinePluginì ì¬ì©í©ëë¤.
optimization.nodeEnvì 기본ê°ì modeì ë°ë¼ ë¤ë¦
ëë¤.
| 모ë | ê¸°ë³¸ê° |
|---|---|
"production" | 'production' |
"development" | 'development' |
"none" | false |
ì¬ì© ê°ë¥í ê°ì ìëì ê°ìµëë¤.
- 모ë 문ìì´:
process.env.NODE_ENV를 ì¤ì íë ê°ì ëë¤. - false:
process.env.NODE_ENVê°ì ìì íê±°ë ì¤ì íì§ ììµëë¤.
webpack.config.js
export default {
// ...
optimization: {
nodeEnv: "production",
},
};optimization.portableRecords
boolean
optimization.portableRecordsë 컨í
ì¤í¸ í´ë를 ì´ëí ì ìëë¡ ìë ê²½ë¡ê° ìë ë ì½ë를 ìì±íëë¡ í©ëë¤.
기본ì ì¼ë¡ optimization.portableRecordsë ë¹íì±íëì´ ììµëë¤. ë¤ì ë ì½ë ìµì
ì¤ íëë¼ë webpack ì¤ì ì ì ê³µëë©´ ìëì¼ë¡ íì±íë©ëë¤. recordsPath, recordsInputPath, recordsOutputPath.
webpack.config.js
export default {
// ...
optimization: {
portableRecords: true,
},
};optimization.providedExports
boolean
export * from ...ìì ë³´ë¤ í¨ì¨ì ì¸ ì½ë를 ìì±í기 ìí´ ëª¨ëìì ì´ë¤ exportê° ì ê³µëëì§ íì
í©ëë¤. 기본ì ì¼ë¡ optimization.providedExportsê° íì±íë©ëë¤.
webpack.config.js
export default {
// ...
optimization: {
providedExports: false,
},
};optimization.realContentHash
boolean
ì ì
ì´ ì²ë¦¬ë í ì¬ë°ë¥¸ ì ì
ì½í
ì¸ í´ì를 ì»ê¸° ìí´ ì¶ê° í´ì ì»´íì¼ í¨ì¤ë¥¼ ìíí©ëë¤. realContentHash를 falseë¡ ì¤ì íë©´ ë´ë¶ ë°ì´í°ë¥¼ ì¬ì©í´ í´ì를 ê³ì°íë©°, ì ì
ì´ ëì¼íëë¼ë ê°ì´ ë³ê²½ë ì ììµëë¤.
optimization.realContentHashì 기본ê°ì modeì ë°ë¼ ë¤ë¦
ëë¤.
| 모ë | ê¸°ë³¸ê° |
|---|---|
"production" | true |
"development" | false |
"none" | false |
webpack.config.js
export default {
// ...
optimization: {
realContentHash: false,
},
};optimization.removeAvailableModules
boolean = false
모ëì´ ì´ë¯¸ 모ë ììì í¬í¨ëì´ìë ê²½ì° ì²í¬ìì í´ë¹ 모ëì ê°ì§íê³ ì ê±°í©ëë¤. optimization.removeAvailableModules를 trueë¡ ì¤ì íë©´ ì´ ìµì íê° íì±íë©ëë¤.
webpack.config.js
export default {
// ...
optimization: {
removeAvailableModules: true,
},
};optimization.removeEmptyChunks
boolean = true
ë¹ ì²í¬ë¥¼ ê°ì§íê³ ì ê±°í©ëë¤. optimization.removeEmptyChunks를 falseë¡ ì¤ì íë©´ ì´ ìµì íê° ë¹íì±íë©ëë¤.
webpack.config.js
export default {
// ...
optimization: {
removeEmptyChunks: false,
},
};optimization.runtimeChunk
object string boolean
optimization.runtimeChunk를 true ëë 'multiple'ë¡ ì¤ì íë©´ ë°íìë§ í¬í¨ë ì¶ê° ì²í¬ê° ê° ìí¸ë¦¬ í¬ì¸í¸ì ì¶ê°ë©ëë¤. ì´ ì¤ì ì ë¤ìì ëí ë³ì¹ì
ëë¤.
webpack.config.js
export default {
// ...
optimization: {
runtimeChunk: {
name: (entrypoint) => `runtime~${entrypoint.name}`,
},
},
};ì´ ëì 'single'ê°ì ì¤ì íë©´ ìì±ë 모ë ì²í¬ìì ê³µì í ë°íì íì¼ì ìì±í©ëë¤. ì´ ì¤ì ì ë¤ìì ëí ë³ì¹ì
ëë¤.
webpack.config.js
export default {
// ...
optimization: {
runtimeChunk: {
name: "runtime",
},
},
};optimization.runtimeChunk를 objectë¡ ì¤ì íë©´ ë°íì ì²í¬ì ì´ë¦ ëë ì´ë¦ í©í 리를 ëíë´ë name ìì±ë§ ì ê³µ í ì ììµëë¤.
기본ê°ì falseì
ëë¤. ê° ìí¸ë¦¬ ì²í¬ìë ë°íìì´ í¬í¨ë©ëë¤.
webpack.config.js
export default {
// ...
optimization: {
runtimeChunk: {
name: (entrypoint) => `runtimechunk~${entrypoint.name}`,
},
},
};optimization.sideEffects
boolean string: 'flag'
package.jsonì sideEffects íë그를 ì¸ìí©ëë¤. ëë ì¬ì´ë ì´íí¸ ììì¼ë¡ íëê·¸ ë 모ëì exportê° ì¬ì©ëì§ ìì ë ê±´ëë°ëë¡ í©ëë¤.
package.json
{
"name": "awesome npm module",
"version": "1.0.0",
"sideEffects": false
}optimization.sideEffectsë optimization.providedExports íì±íì ìì¡´í©ëë¤. ì´ ëíëìë ë¹ë ìê° ë¹ì©ì´ ë¤ì§ë§, 모ëì ì ê±°íë©´ ì½ë ìì±ì´ ì 기 ë문ì ì±ë¥ì ê¸ì ì ì¸ ìí¥ì 미칩ëë¤. ì´ ìµì íì í¨ê³¼ë ì½ë ë² ì´ì¤ì ë°ë¼ ë¤ë¥´ë¯ë¡ ê°ë¥í ì±ë¥ í¥ìì ìí´ ìëí´ë³´ì¸ì.
optimization.sideEffectsì 기본ê°ì modeì ë°ë¼ ë¤ë¦
ëë¤.
| 모ë | ê¸°ë³¸ê° |
|---|---|
"production" | true |
"development" | 'flag' |
"none" | 'flag' |
webpack.config.js
export default {
// ...
optimization: {
sideEffects: true,
},
};ìë íëê·¸ë§ ì¬ì©íê³ ìì¤ ì½ë를 ë¶ìíì§ ìì¼ë ¤ë©´ ìëì ê°ì´ ì¬ì©íì¸ì.
export default {
// ...
optimization: {
sideEffects: "flag",
},
};optimization.splitChunks
object
webpack v4+ììë ëì ì¼ë¡ ê°ì ¸ì¨ 모ëì ìë¡ì´ ê³µíµ ì²í¬ ì ëµì ë°ë¡ ì¬ì©í ì ììµëë¤. SplitChunksPlugin íì´ì§ìì ì´ ëìì ì¤ì í ë ì¬ì© ê°ë¥í ìµì ì íì¸í´ë³´ì¸ì.
optimization.usedExports
boolean string: 'global'
ê° ëª¨ëìì ì¬ì©ë export를 íì¸í©ëë¤. ì´ë optimization.providedExportsì ìì¡´í©ëë¤. optimization.usedExportsì ìí´ ìì§ë ì ë³´ë ë¤ë¥¸ ìµì í ëë ì½ë ìì±ì ì¬ì©ë©ëë¤. ì¦, ì¬ì©íì§ ìì exportë ìì±ëì§ ìì¼ë©°, 모ë ì¬ì©ì´ í¸íëë ê²½ì° export ì´ë¦ì´ ë¨ì¼ ìë³ìë¡ ë³ê²½ë©ëë¤.
ìµìí ëêµ¬ë¡ ë°ë ì½ë ì ê±° ì ì´ë¡ ì¸í´ ì¬ì©íì§ ìì export를 ì ê±° í ì ììµëë¤.
optimization.usedExportsì 기본ê°ì modeì ë°ë¼ ë¤ë¦
ëë¤.
| 모ë | ê¸°ë³¸ê° |
|---|---|
"production" | true |
"development" | false |
"none" | false |
webpack.config.js
export default {
// ...
optimization: {
usedExports: false,
},
};ë°íì ë¹ ì¬ì©ë export ë¶ììì ì ì¸íë ¤ë©´ ìëì ê°ì´ ì¬ì©íì¸ì.
export default {
// ...
optimization: {
usedExports: "global",
},
};


