Webpack ë´ë¶ì ì¼ë¡ ì¬ì©íë íë¬ê·¸ì¸ì 목ë¡ì ëë¤.
ë´ë¶ íë¬ê·¸ì¸ì ë²ì£¼:
ì»´íì¼ë¬ì íê²½ì ìí¥ì 주ë íë¬ê·¸ì¸ì ëë¤.
webpack.node.NodeEnvironmentPlugin()
ì»´íì¼ë¬ì Node.js ì¤íì¼ì íì¼ ìì¤í ì ì ì©í©ëë¤.
ì»´íì¼ë¬ì ìí¥ì 주ë íë¬ê·¸ì¸ì ëë¤.
MemoryCachePlugin()
모ëì´ ë©ëª¨ë¦¬ì ìºìëë ì»´íì¼ë¬ì ìºì를 ì¶ê°í©ëë¤.
ProgressPlugin(handler)
ì»´íì¼ë¬ì í
ì íì¬ ì§í ì 보를 ì¶ì¶í©ëë¤. handlerë function(percentage, message)ë¼ë ìëª
ì´ ìì´ì¼ í©ëë¤. Percentageë 0ê³¼ 1 ì¬ì´ì ê°ì¼ë¡ ë¶ë¦½ëë¤. 0ì ìì, 1ì ëì ëíë
ëë¤.
RecordIdsPlugin()
ë ì½ëë¡ë¶í° ì²í¬ ìì´ëì 모ëì ì ì¥íê³ ë³µìí©ëë¤.
ì»´íì¼ì ìí¸ë¦¬ ì²í¬ë¥¼ í¬í¨íë íë¬ê·¸ì¸ì ëë¤.
EntryPlugin(context, entry, options)
ì»´íì¼ì ìí¸ë¦¬ ì²í¬ë¥¼ ì¶ê°í©ëë¤. ì²í¬ì ì´ë¦ì options.nameì´ê³ ì¤ì§ íëì 모ëë§ í¬í¨í©ëë¤(ìì¡´ì± ì¶ê°). 모ëì context (ì ë ê²½ë¡)ì entryìì íì¸ë©ëë¤.
PrefetchPlugin(context, request)
ë³ë ¬ ì»´íì¼ì ë ì¬ì©í기 ìí´ì ìì¡´ì±ê³¼ request를 í리íì¹í©ëë¤. ì´ë¤ ì²í¬ë ìì±ëì§ ììµëë¤. 모ëì context (ì ë ê²½ë¡)ì requestìì íì¸ë©ëë¤.
JsonpTemplatePlugin(options)
ì²í¬ë JSONP-callsë¡ ëíëì´ ììµëë¤. ë¡ë© ìê³ ë¦¬ì¦ì ìí¸ë¦¬ ì²í¬ì í¬í¨ì´ ë©ëë¤. <script> í그를 ì¶ê°í¨ì¼ë¡ì¨ ì²í¬ë¥¼ ë¡ëí©ëë¤.
optionsë ì¶ë ¥ ìµì
ì
ëë¤.
options.jsonpFunctionì JSONP í¨ìì
ëë¤.
options.publicPathë ì²í¬ë¥¼ ë¡ë©í기 ìí ê²½ë¡ë¡ ì¬ì©ë©ëë¤.
options.chunkFilenameë ì²í¬ê° ììëë íì¼ ì´ë¦ ì´ë¦ì
ëë¤.
node/NodeTemplatePlugin(options)
ì²í¬ë ë²ë¤ 모ëì ë´ë³´ë´ë Node.js 모ëë¡ ëíëì´ ììµëë¤. ìí¸ë¦¬ ì²í¬ë ì²í¬ë¥¼ ì구í¨ì¼ë¡ì¨ ë¡ëë©ëë¤.
optionsë ì¶ë ¥ ìµì
ì
ëë¤.
options.chunkFilenameë ì²í¬ë¥¼ ë¡ë©í기 ìí ê²½ë¡ë¡ ì¬ì©ë©ëë¤.
LibraryTemplatePlugin(name, target)
ìí¸ë¦¬ ì²í¬ë¤ì type ì íì name ë¼ì´ë¸ë¬ë¦¬ë¡ë¶í° 꾸며ì§ëë¤.
webworker/WebWorkerTemplatePlugin(options)
ì²í¬ë importScriptsì ìí´ ë¡ëë©ëë¤. ê·¸ë ì§ ìë¤ë©´ JsonpTemplatePluginê³¼ ë¹ì·í©ëë¤.
optionsì ì¶ë ¥ ìµì
ì
ëë¤.
// @sourceURLë¡ ì£¼ìì´ ë¬ë¦° evalë¡ ê°ê°ì 모ëì ëíí¨ì¼ë¡ì¨ 모ë í
í릿ì 꾸ë°ëë¤.
SourceMapDevToolPlugin(sourceMapFilename, sourceMappingURLComment, moduleFilenameTemplate, fallbackModuleFilenameTemplate)
ê° ì²í¬ì ëí ìì¤ë§µì ìì±í¨ì¼ë¡ì¨ í í릿ë¤ì 꾸ë°ëë¤.
sourceMapFilenameì ìì¤ë§µì íì¼ ì´ë¦ í
í릿ì
ëë¤. [hash], [name], [id], [file] ê³¼ [filebase]ë êµì²´ëììµëë¤. ë§ì½ì ì¸ìê° ìì¼ë©´, ìì¤ë§µì DataUrlë¡ ì¸ë¼ì¸ ë ê²ì
ëë¤.
HotModuleReplacementPlugin(options)
Hot module replacement ëí ì§ìì ì¶ê°í©ëë¤. ë°íì ì½ë를 ì¶ê°í í í릿ì 꾸ë°ëë¤. `module.hot' API를 ì¶ê°í©ëë¤.
options.hotUpdateChunkFilenameì hot ì
ë°ì´í¸ ì²í¬ íì¼ ì´ë¦ì
ëë¤.
options.hotUpdateMainFilenameì hot ì
ë°ì´í¸ 매ëíì¤í¸ íì¼ ì´ë¦ì
ëë¤.
options.hotUpdateFunctionë hot ì
ë°ì´í¸ì JSON í¨ì ì´ë¦ì
ëë¤.
모ëì ìì¤ ì½ëì ìí¥ì 미ì¹ë íë¬ê·¸ì¸ì ëë¤.
webpack_public_path, webpack_require, webpack_modules ê³¼ webpack_chunk_loadì ì ê·¼í ì ìëë¡ ì¤ì í©ëë¤. require.valueOfì require.onErrorê° ë¤ë¥¸ íë¬ê·¸ì¸ì¼ë¡ ì²ë¦¬ëì§ ìëë¡ í©ëë¤.
íì¬ë ì¸ëª¨ê° ììµëë¤. ë¤ë¥¸ 모ë ë¡ëê³¼ì í¸íì±ì ë³´ì¥í©ëë¤.
íìì ìí´ ë°ì¬ë í
ì ì¬ì©í¨ì¼ë¡ì¨ dead branch를 ì¶ê°ë¡ ì 거를 ê°ë¥íê² íë ¤ê³ if (...)문과 ì¼í ì°ì°ì를 íê°íì¬ true/falseë¡ ë°ê¾¸ë ¤ê³ ìëí©ëë¤.
íë¡ëì 모ëìë dead branchì ê´ë ¨íì¬ ì¬ë¬ ìµì í ë¤ì´ ììµëë¤.
Webpackì 조건문ì íê°íë ¤ê³ í ê²ì ëë¤. ë§ì½ ì±ê³µíë¤ë©´ dead branchê° ì ê±°ë©ëë¤. Webpckì ì»´íì¼ë¬ê° ìì§ ëª»íë í ìì í´ë©ì í ì ììµëë¤. ë¤ì ìì를 ë´ ìë¤.
import { calculateTax } from './tax';
const FOO = 1;
if (FOO === 0) {
// dead branch
calculateTax();
}ìì ìììì, webpackì branch를 ì를 ì ìì§ë§, Terserë í ì ììµëë¤. ê·¸ë¬ë ë§ì½ FOOê° DefinePlugin ì ì¬ì©íë©´, webpackì ì±ê³µí ê²ì
ëë¤.
import { calculateTax } from './tax';ë ì ê±°ëë¤ë ì ì ì¸ê¸í´ì¼ í©ëë¤. ìëíë©´ calculateTax() í¸ì¶ì´ dead branchì ìì´ ì ê±°ëì기 ë문ì
ëë¤.
ProvidePlugin(name, request)
ë§ì½ì 모ëìì nameì´ ì¬ì©ëë ê²½ì°ë require(<request>)ì ìí´ ë¡ëë 모ëì ìí´ì ì±ìì§ëë¤.
NodeStuffPlugin(options, context)
Node.js 모ëììë ì¼ë°ì ì¼ë¡ ì¬ì©í ì ìë í목ì ì ê³µí©ëë¤.
ëí, moduleì ì¬ì©íë ê²½ì°ìë ì¼ë¶ì Node.js í목ì¼ë¡ ì±ìì§ëë¡ í©ëë¤.
require.jsììë ì¼ë°ì ì¼ë¡ ì¬ì©í ì ìë í목ì ì ê³µí©ëë¤.
require[js].configë ì ê±°ë©ëë¤. require.versionì 0.0.0ì
ëë¤. requirejs.onErrorë require.onErrorì 매íì´ ë©ëë¤.
node/NodeSourcePlugin(options)
ì´ ëª¨ëì Node.js íê²½ì´ ìëë©´ ì¬ì©í ì ìë Node.jsì ë´ì©ì ì¶ê°í©ëë¤.
ì¬ì©ëë ê²½ì°ìë process, console, Bufferì gloì ëí polyfillsì ì¶ê°í´ì¼ í©ëë¤.
node/NodeTargetPlugin()
ë§ì½ Node.js íê²½ìì ë²ë¤ì ì¤ííë ê²½ì°ìë íë¬ê·¸ì¸ì ì¬ì©í´ì¼ í©ëë¤.
ë§ì½ ë¤ì´í°ë¸ 모ëì´ ë²ë¤ ëì´ìëë¼ë ì¬ë°ë¥´ê² ë¡ëëëë¡ ë³´ì¥í©ëë¤.
dependencies/AMDPlugin(options)
AMD ì¤íì¼ì defineê³¼ require 모ëì ì ê³µí©ëë¤. ëí, require.amd, define.amd ì webpack_amd_options## 를 íë¼ë¯¸í°ë¡ ì ë¬ë optionsì ë°ì¸ë©í©ëë¤.
dependencies/CommonJsPlugin
CommonJs ì¤íì¼ì require 모ëì ì ê³µí©ëë¤.
dependencies/RequireContextPlugin(modulesDirectories, extensions)
require.content를 ì ê³µí©ëë¤. modulesDirectoriesì extensions íë¼ë¯¸í°ë íì¼ì ëí ìì²ì ëì²´í ì ìë ê²ì ì°¾ë ë° ì¬ì©ë©ëë¤. 리졸ë²ì ì ê³µíë ê²ê³¼ ëì¼í ë°°ì´ì ì ê³µíë ê²ì´ ì ì©í©ëë¤.
dependencies/RequireEnsurePlugin()
require.ensure를 ì ê³µí©ëë¤.
dependencies/RequireIncludePlugin()
require.include를 ì ê³µí©ëë¤.
DefinePlugin(definitions)
ìë³ìì ëí´ ìì를 ì ìí©ëë¤.
definitionsì ê°ì²´ì
ëë¤.
webpack.optimize ë¤ìì¤íì´ì¤ ìëì 모ë íë¬ê·¸ì¸ì mode ê° 'none'ì¼ë¡ ì¤ì ë ê²½ì°ìë§ ì¬ì©í´ì¼ í©ëë¤. ê·¸ë ì§ ìë¤ë©´ íë¬ê·¸ì¸ì ë ë² ì ì©ëì´ì¼ í©ëë¤.
optimize/LimitChunkCountPlugin(options)
ë³í© ì²í¬ì ì íë ì²í¬ ìë `options.maxChunks'ë³´ë¤ ììµëë¤.
ê° ì²í¬ì ëí ì¤ë²í¤ëë options.chunkOverhead ëë 기본ê°ì¸ 10000ì ìí´ ì ê³µë©ëë¤. ìí¸ë¦¬ ì²í¬ì í¬ê¸°ë options.entryChunkMultiplicator (ëë 10)ì ìí´ ê³±í´ì§ëë¤.
ì ì²´ì ì¸ í¬ê¸°ë¥¼ ê°ì¥ ë§ì´ ì¤ì¸ ì²í¬ê° 첫 ë²ì§¸ë¡ ë³í©ë©ëë¤. ë§ì½ ì¬ë¬ ì¡°í©ì´ ê°ì¼ë©´ ë³í©ë í¬ê¸°ê° ìì ê²ì´ ì íë©ëë¤.
optimize/MergeDuplicateChunksPlugin()
ê°ì 모ëì ì²í¬ê° ë³í©ë©ëë¤.
optimize/RemoveEmptyChunksPlugin()
모ë ë¶ëª¨ ì²í¬ì í¬í¨ë 모ëì ì²í¬ë¡ë¶í° ì ê±°ë©ëë¤.
optimize/MinChunkSizePlugin(minChunkSize)-
ê° ì²í¬ì ìµì í¬ê¸°ê° minChunkSizeê° ë ëê¹ì§ ì²í¬ë¥¼ ë³í©í©ëë¤.
ModuleConcatenationPlugin pageì ëí 구체ì ì¸ ë´ì©ì íì¸í´ë³´ì¸ì.
optimize/FlagIncludedChunksPlugin()
ì²í¬ì í¬í¨ë ì²í¬ì ì²í¬ ìì´ë를 ì¶ê°í©ëë¤. ë¶íìí ì²í¬ ë¡ë를 ì ê±°í ì ììµëë¤.
optimize/RealContentHashPlugin()
optimization.realContentHash ìµì
ì´ íì±í ë ë, webpackì ë´ë¶ì ì¼ë¡ RealContentHashPluginì ì»´íì¼ë¬ì ì¶ê°í©ëë¤.
RealContentHashPluginì í´ì ì
ë°ì´í¸ë¥¼ 커ì¤í°ë§ì´ì§í ì ìë í
ì¸ updateHash 5.8.0+를 ì ê³µí©ëë¤.
const webpack = require('webpack');
const RealContentHashPlugin = webpack.optimize.RealContentHashPlugin;
// ...
compiler.hooks.compilation.tap('MyPlugin', (compilation) => {
const hooks = RealContentHashPlugin.getCompilationHooks(compilation);
hooks.updateHash.tap('MyPlugin', (content, oldHash) => {
// ì´ê³³ìì ìíëë°ë¡ í´ì를 ê³ì°í ì ììµëë¤.
});
});