webpack 4.15.0 → 4.16.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (271) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +761 -758
  3. package/SECURITY.md +9 -9
  4. package/buildin/amd-define.js +3 -3
  5. package/buildin/amd-options.js +2 -2
  6. package/buildin/global.js +20 -20
  7. package/buildin/harmony-module.js +24 -24
  8. package/buildin/module.js +22 -22
  9. package/buildin/system.js +7 -7
  10. package/hot/dev-server.js +61 -61
  11. package/hot/emitter.js +2 -2
  12. package/hot/log-apply-result.js +44 -44
  13. package/hot/log.js +45 -45
  14. package/hot/only-dev-server.js +105 -105
  15. package/hot/poll.js +40 -37
  16. package/hot/signal.js +62 -62
  17. package/lib/APIPlugin.js +84 -84
  18. package/lib/AmdMainTemplatePlugin.js +87 -87
  19. package/lib/AsyncDependencyToInitialChunkError.js +31 -31
  20. package/lib/AutomaticPrefetchPlugin.js +1 -1
  21. package/lib/BannerPlugin.js +117 -117
  22. package/lib/BasicEvaluatedExpression.js +211 -211
  23. package/lib/CachePlugin.js +102 -102
  24. package/lib/CaseSensitiveModulesWarning.js +67 -67
  25. package/lib/Chunk.js +833 -811
  26. package/lib/ChunkGroup.js +4 -4
  27. package/lib/ChunkRenderError.js +32 -32
  28. package/lib/CommentCompilationWarning.js +2 -2
  29. package/lib/CompatibilityPlugin.js +70 -70
  30. package/lib/Compilation.js +46 -15
  31. package/lib/ConcurrentCompilationError.js +19 -19
  32. package/lib/ConstPlugin.js +258 -258
  33. package/lib/ContextExclusionPlugin.js +28 -17
  34. package/lib/ContextModule.js +844 -739
  35. package/lib/ContextModuleFactory.js +262 -256
  36. package/lib/ContextReplacementPlugin.js +133 -133
  37. package/lib/DefinePlugin.js +49 -0
  38. package/lib/DelegatedModule.js +5 -0
  39. package/lib/DelegatedModuleFactoryPlugin.js +95 -89
  40. package/lib/DelegatedPlugin.js +39 -39
  41. package/lib/DependenciesBlock.js +1 -1
  42. package/lib/Dependency.js +10 -4
  43. package/lib/DllModule.js +60 -54
  44. package/lib/DllModuleFactory.js +29 -29
  45. package/lib/DllPlugin.js +44 -44
  46. package/lib/DllReferencePlugin.js +132 -84
  47. package/lib/EntryModuleNotFoundError.js +21 -21
  48. package/lib/Entrypoint.js +54 -54
  49. package/lib/EnvironmentPlugin.js +72 -65
  50. package/lib/ErrorHelpers.js +60 -60
  51. package/lib/EvalDevToolModulePlugin.js +27 -27
  52. package/lib/EvalSourceMapDevToolModuleTemplatePlugin.js +115 -115
  53. package/lib/EvalSourceMapDevToolPlugin.js +41 -41
  54. package/lib/ExportPropertyMainTemplatePlugin.js +53 -53
  55. package/lib/ExternalModule.js +165 -159
  56. package/lib/ExternalsPlugin.js +23 -23
  57. package/lib/FlagDependencyExportsPlugin.js +146 -146
  58. package/lib/FlagInitialModulesAsUsedPlugin.js +36 -36
  59. package/lib/FunctionModuleTemplatePlugin.js +100 -100
  60. package/lib/Generator.js +60 -52
  61. package/lib/HarmonyLinkingError.js +17 -17
  62. package/lib/HashedModuleIdsPlugin.js +53 -53
  63. package/lib/HotModuleReplacementPlugin.js +411 -413
  64. package/lib/IgnorePlugin.js +90 -90
  65. package/lib/JavascriptGenerator.js +229 -229
  66. package/lib/JavascriptModulesPlugin.js +179 -179
  67. package/lib/JsonGenerator.js +55 -55
  68. package/lib/JsonModulesPlugin.js +30 -30
  69. package/lib/JsonParser.js +27 -27
  70. package/lib/LibManifestPlugin.js +86 -86
  71. package/lib/LibraryTemplatePlugin.js +153 -153
  72. package/lib/LoaderOptionsPlugin.js +53 -53
  73. package/lib/LoaderTargetPlugin.js +24 -24
  74. package/lib/MemoryOutputFileSystem.js +5 -5
  75. package/lib/Module.js +431 -391
  76. package/lib/ModuleBuildError.js +52 -52
  77. package/lib/ModuleDependencyError.js +35 -35
  78. package/lib/ModuleDependencyWarning.js +25 -25
  79. package/lib/ModuleError.js +36 -36
  80. package/lib/ModuleFilenameHelpers.js +178 -178
  81. package/lib/ModuleNotFoundError.js +23 -23
  82. package/lib/ModuleParseError.js +57 -57
  83. package/lib/ModuleTemplate.js +93 -93
  84. package/lib/ModuleWarning.js +36 -36
  85. package/lib/MultiCompiler.js +283 -283
  86. package/lib/MultiModule.js +87 -81
  87. package/lib/MultiModuleFactory.js +23 -23
  88. package/lib/MultiStats.js +92 -92
  89. package/lib/MultiWatching.js +38 -38
  90. package/lib/NamedChunksPlugin.js +29 -29
  91. package/lib/NamedModulesPlugin.js +57 -57
  92. package/lib/NoEmitOnErrorsPlugin.js +20 -20
  93. package/lib/NoModeWarning.js +23 -23
  94. package/lib/NodeStuffPlugin.js +197 -179
  95. package/lib/NormalModule.js +542 -536
  96. package/lib/NormalModuleFactory.js +526 -526
  97. package/lib/NormalModuleReplacementPlugin.js +51 -51
  98. package/lib/NullFactory.js +12 -12
  99. package/lib/OptionsApply.js +10 -10
  100. package/lib/OptionsDefaulter.js +84 -84
  101. package/lib/Parser.js +2202 -2193
  102. package/lib/ParserHelpers.js +103 -103
  103. package/lib/PrefetchPlugin.js +37 -37
  104. package/lib/ProgressPlugin.js +246 -246
  105. package/lib/ProvidePlugin.js +86 -86
  106. package/lib/RawModule.js +56 -56
  107. package/lib/RecordIdsPlugin.js +230 -230
  108. package/lib/RemovedPluginError.js +11 -11
  109. package/lib/RequestShortener.js +83 -83
  110. package/lib/RequireJsStuffPlugin.js +69 -69
  111. package/lib/ResolverFactory.js +64 -64
  112. package/lib/RuntimeTemplate.js +12 -0
  113. package/lib/SetVarMainTemplatePlugin.js +69 -69
  114. package/lib/SingleEntryPlugin.js +6 -1
  115. package/lib/SizeFormatHelpers.js +24 -24
  116. package/lib/SourceMapDevToolModuleOptionsPlugin.js +49 -49
  117. package/lib/SourceMapDevToolPlugin.js +301 -301
  118. package/lib/Stats.js +28 -5
  119. package/lib/TemplatedPathPlugin.js +173 -173
  120. package/lib/UnsupportedFeatureWarning.js +22 -22
  121. package/lib/UseStrictPlugin.js +54 -54
  122. package/lib/WarnCaseSensitiveModulesPlugin.js +37 -37
  123. package/lib/WarnNoModeSetPlugin.js +17 -17
  124. package/lib/WatchIgnorePlugin.js +100 -100
  125. package/lib/Watching.js +194 -194
  126. package/lib/WebpackOptionsApply.js +92 -10
  127. package/lib/WebpackOptionsDefaulter.js +368 -354
  128. package/lib/debug/ProfilingPlugin.js +430 -430
  129. package/lib/dependencies/AMDPlugin.js +250 -250
  130. package/lib/dependencies/AMDRequireArrayDependency.js +49 -49
  131. package/lib/dependencies/AMDRequireContextDependency.js +20 -20
  132. package/lib/dependencies/AMDRequireDependency.js +135 -135
  133. package/lib/dependencies/AMDRequireItemDependency.js +22 -22
  134. package/lib/dependencies/CommonJsPlugin.js +161 -161
  135. package/lib/dependencies/CommonJsRequireContextDependency.js +23 -23
  136. package/lib/dependencies/CommonJsRequireDependency.js +22 -22
  137. package/lib/dependencies/CommonJsRequireDependencyParserPlugin.js +6 -0
  138. package/lib/dependencies/ConstDependency.js +33 -33
  139. package/lib/dependencies/ContextDependency.js +68 -68
  140. package/lib/dependencies/ContextDependencyHelpers.js +142 -142
  141. package/lib/dependencies/ContextDependencyTemplateAsId.js +42 -42
  142. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +38 -38
  143. package/lib/dependencies/ContextElementDependency.js +21 -21
  144. package/lib/dependencies/CriticalDependencyWarning.js +20 -20
  145. package/lib/dependencies/DelegatedSourceDependency.js +18 -18
  146. package/lib/dependencies/DllEntryDependency.js +20 -20
  147. package/lib/dependencies/HarmonyAcceptDependency.js +45 -45
  148. package/lib/dependencies/HarmonyCompatibilityDependency.js +31 -31
  149. package/lib/dependencies/HarmonyDetectionParserPlugin.js +92 -92
  150. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +139 -139
  151. package/lib/dependencies/HarmonyExportHeaderDependency.js +30 -30
  152. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +2 -1
  153. package/lib/dependencies/HarmonyImportDependency.js +109 -109
  154. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +222 -222
  155. package/lib/dependencies/HarmonyImportSideEffectDependency.js +31 -31
  156. package/lib/dependencies/HarmonyImportSpecifierDependency.js +167 -167
  157. package/lib/dependencies/HarmonyInitDependency.js +60 -60
  158. package/lib/dependencies/HarmonyModulesPlugin.js +146 -146
  159. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +26 -26
  160. package/lib/dependencies/ImportContextDependency.js +23 -23
  161. package/lib/dependencies/ImportDependenciesBlock.js +18 -18
  162. package/lib/dependencies/ImportDependency.js +34 -34
  163. package/lib/dependencies/ImportEagerDependency.js +32 -32
  164. package/lib/dependencies/ImportParserPlugin.js +263 -263
  165. package/lib/dependencies/ImportPlugin.js +82 -82
  166. package/lib/dependencies/ImportWeakDependency.js +34 -34
  167. package/lib/dependencies/LoaderPlugin.js +18 -1
  168. package/lib/dependencies/LocalModule.js +23 -23
  169. package/lib/dependencies/LocalModulesHelpers.js +52 -52
  170. package/lib/dependencies/ModuleDependencyTemplateAsId.js +17 -17
  171. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +17 -17
  172. package/lib/dependencies/ModuleHotAcceptDependency.js +23 -23
  173. package/lib/dependencies/ModuleHotDeclineDependency.js +23 -23
  174. package/lib/dependencies/NullDependency.js +20 -20
  175. package/lib/dependencies/PrefetchDependency.js +18 -18
  176. package/lib/dependencies/RequireContextDependency.js +22 -22
  177. package/lib/dependencies/RequireContextDependencyParserPlugin.js +56 -56
  178. package/lib/dependencies/RequireContextPlugin.js +143 -143
  179. package/lib/dependencies/RequireEnsureDependenciesBlock.js +33 -33
  180. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +116 -116
  181. package/lib/dependencies/RequireEnsureDependency.js +58 -58
  182. package/lib/dependencies/RequireEnsureItemDependency.js +21 -21
  183. package/lib/dependencies/RequireEnsurePlugin.js +74 -74
  184. package/lib/dependencies/RequireHeaderDependency.js +26 -26
  185. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +23 -23
  186. package/lib/dependencies/RequireIncludePlugin.js +61 -61
  187. package/lib/dependencies/RequireResolveContextDependency.js +23 -23
  188. package/lib/dependencies/RequireResolveDependency.js +22 -22
  189. package/lib/dependencies/RequireResolveDependencyParserPlugin.js +85 -85
  190. package/lib/dependencies/RequireResolveHeaderDependency.js +26 -26
  191. package/lib/dependencies/SystemPlugin.js +125 -125
  192. package/lib/dependencies/UnsupportedDependency.js +27 -27
  193. package/lib/dependencies/WebAssemblyExportImportedDependency.js +29 -29
  194. package/lib/dependencies/WebAssemblyImportDependency.js +48 -48
  195. package/lib/dependencies/WebpackMissingModule.js +20 -20
  196. package/lib/formatLocation.js +75 -61
  197. package/lib/node/NodeChunkTemplatePlugin.js +31 -31
  198. package/lib/node/NodeEnvironmentPlugin.js +28 -28
  199. package/lib/node/NodeHotUpdateChunkTemplatePlugin.js +36 -36
  200. package/lib/node/NodeMainTemplate.runtime.js +27 -27
  201. package/lib/node/NodeMainTemplatePlugin.js +323 -323
  202. package/lib/node/NodeOutputFileSystem.js +22 -22
  203. package/lib/node/NodeSourcePlugin.js +144 -144
  204. package/lib/node/NodeTargetPlugin.js +18 -18
  205. package/lib/node/NodeTemplatePlugin.js +31 -31
  206. package/lib/node/NodeWatchFileSystem.js +99 -99
  207. package/lib/node/ReadFileCompileWasmTemplatePlugin.js +61 -61
  208. package/lib/optimize/AggressiveMergingPlugin.js +87 -87
  209. package/lib/optimize/AggressiveSplittingPlugin.js +287 -287
  210. package/lib/optimize/ConcatenatedModule.js +5 -0
  211. package/lib/optimize/EnsureChunkConditionsPlugin.js +70 -70
  212. package/lib/optimize/FlagIncludedChunksPlugin.js +99 -99
  213. package/lib/optimize/LimitChunkCountPlugin.js +66 -66
  214. package/lib/optimize/MergeDuplicateChunksPlugin.js +78 -78
  215. package/lib/optimize/MinChunkSizePlugin.js +77 -77
  216. package/lib/optimize/NaturalChunkOrderPlugin.js +41 -0
  217. package/lib/optimize/OccurrenceChunkOrderPlugin.js +61 -0
  218. package/lib/optimize/OccurrenceModuleOrderPlugin.js +103 -0
  219. package/lib/optimize/OccurrenceOrderPlugin.js +135 -133
  220. package/lib/optimize/RemoveEmptyChunksPlugin.js +42 -42
  221. package/lib/optimize/RemoveParentModulesPlugin.js +127 -127
  222. package/lib/optimize/RuntimeChunkPlugin.js +41 -41
  223. package/lib/optimize/SideEffectsFlagPlugin.js +168 -168
  224. package/lib/optimize/SplitChunksPlugin.js +866 -850
  225. package/lib/performance/AssetsOverSizeLimitWarning.js +30 -30
  226. package/lib/performance/EntrypointsOverSizeLimitWarning.js +30 -30
  227. package/lib/performance/NoAsyncChunksWarning.js +21 -21
  228. package/lib/performance/SizeLimitsPlugin.js +105 -105
  229. package/lib/util/SortableSet.js +1 -0
  230. package/lib/util/StackedSetMap.js +144 -135
  231. package/lib/util/TrackingSet.js +35 -35
  232. package/lib/util/cachedMerge.js +35 -35
  233. package/lib/util/deterministicGrouping.js +251 -251
  234. package/lib/util/identifier.js +103 -103
  235. package/lib/util/objectToMap.js +16 -16
  236. package/lib/validateSchema.js +67 -67
  237. package/lib/wasm/UnsupportedWebAssemblyFeatureError.js +17 -17
  238. package/lib/wasm/WasmFinalizeExportsPlugin.js +1 -1
  239. package/lib/wasm/WebAssemblyGenerator.js +16 -2
  240. package/lib/wasm/WebAssemblyJavascriptGenerator.js +147 -133
  241. package/lib/wasm/WebAssemblyParser.js +174 -174
  242. package/lib/wasm/WebAssemblyUtils.js +59 -59
  243. package/lib/web/FetchCompileWasmTemplatePlugin.js +37 -37
  244. package/lib/web/JsonpExportMainTemplatePlugin.js +47 -47
  245. package/lib/web/JsonpHotUpdateChunkTemplatePlugin.js +39 -39
  246. package/lib/web/JsonpMainTemplate.runtime.js +65 -65
  247. package/lib/web/JsonpMainTemplatePlugin.js +1 -1
  248. package/lib/web/JsonpTemplatePlugin.js +23 -23
  249. package/lib/web/WebEnvironmentPlugin.js +18 -18
  250. package/lib/webpack.js +5 -0
  251. package/lib/webworker/WebWorkerChunkTemplatePlugin.js +35 -35
  252. package/lib/webworker/WebWorkerHotUpdateChunkTemplatePlugin.js +40 -40
  253. package/lib/webworker/WebWorkerMainTemplate.runtime.js +65 -65
  254. package/lib/webworker/WebWorkerMainTemplatePlugin.js +196 -196
  255. package/lib/webworker/WebWorkerTemplatePlugin.js +25 -25
  256. package/package.json +22 -13
  257. package/schemas/WebpackOptions.json +2062 -2036
  258. package/schemas/ajv.absolutePath.js +55 -55
  259. package/schemas/plugins/BannerPlugin.json +96 -96
  260. package/schemas/plugins/DllPlugin.json +32 -32
  261. package/schemas/plugins/DllReferencePlugin.json +99 -99
  262. package/schemas/plugins/HashedModuleIdsPlugin.json +24 -24
  263. package/schemas/plugins/LoaderOptionsPlugin.json +26 -26
  264. package/schemas/plugins/SourceMapDevToolPlugin.json +187 -187
  265. package/schemas/plugins/WatchIgnorePlugin.json +16 -16
  266. package/schemas/plugins/debug/ProfilingPlugin.json +12 -12
  267. package/schemas/plugins/optimize/AggressiveSplittingPlugin.json +22 -22
  268. package/schemas/plugins/optimize/LimitChunkCountPlugin.json +15 -15
  269. package/schemas/plugins/optimize/MinChunkSizePlugin.json +13 -13
  270. package/schemas/plugins/optimize/OccurrenceOrderChunkIdsPlugin.json +10 -0
  271. package/schemas/plugins/optimize/OccurrenceOrderModuleIdsPlugin.json +10 -0
@@ -1,246 +1,246 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
-
7
- const createDefaultHandler = profile => {
8
- let lineCaretPosition = 0;
9
- let lastState;
10
- let lastStateTime;
11
-
12
- const defaultHandler = (percentage, msg, ...args) => {
13
- let state = msg;
14
- const details = args;
15
- if (percentage < 1) {
16
- percentage = Math.floor(percentage * 100);
17
- msg = `${percentage}% ${msg}`;
18
- if (percentage < 100) {
19
- msg = ` ${msg}`;
20
- }
21
- if (percentage < 10) {
22
- msg = ` ${msg}`;
23
- }
24
- for (let detail of details) {
25
- if (!detail) continue;
26
- if (detail.length > 40) {
27
- detail = `…${detail.substr(detail.length - 39)}`;
28
- }
29
- msg += ` ${detail}`;
30
- }
31
- }
32
- if (profile) {
33
- state = state.replace(/^\d+\/\d+\s+/, "");
34
- if (percentage === 0) {
35
- lastState = null;
36
- lastStateTime = Date.now();
37
- } else if (state !== lastState || percentage === 1) {
38
- const now = Date.now();
39
- if (lastState) {
40
- const stateMsg = `${now - lastStateTime}ms ${lastState}`;
41
- goToLineStart(stateMsg);
42
- process.stderr.write(stateMsg + "\n");
43
- lineCaretPosition = 0;
44
- }
45
- lastState = state;
46
- lastStateTime = now;
47
- }
48
- }
49
- goToLineStart(msg);
50
- process.stderr.write(msg);
51
- };
52
-
53
- const goToLineStart = nextMessage => {
54
- let str = "";
55
- for (; lineCaretPosition > nextMessage.length; lineCaretPosition--) {
56
- str += "\b \b";
57
- }
58
- for (var i = 0; i < lineCaretPosition; i++) {
59
- str += "\b";
60
- }
61
- lineCaretPosition = nextMessage.length;
62
- if (str) process.stderr.write(str);
63
- };
64
-
65
- return defaultHandler;
66
- };
67
-
68
- class ProgressPlugin {
69
- constructor(options) {
70
- if (typeof options === "function") {
71
- options = {
72
- handler: options
73
- };
74
- }
75
- options = options || {};
76
- this.profile = options.profile;
77
- this.handler = options.handler;
78
- }
79
-
80
- apply(compiler) {
81
- const handler = this.handler || createDefaultHandler(this.profile);
82
- if (compiler.compilers) {
83
- const states = new Array(compiler.compilers.length);
84
- compiler.compilers.forEach((compiler, idx) => {
85
- new ProgressPlugin((p, msg, ...args) => {
86
- states[idx] = [p, msg, ...args];
87
- handler(
88
- states
89
- .map(state => (state && state[0]) || 0)
90
- .reduce((a, b) => a + b) / states.length,
91
- `[${idx}] ${msg}`,
92
- ...args
93
- );
94
- }).apply(compiler);
95
- });
96
- } else {
97
- let lastModulesCount = 0;
98
- let moduleCount = 500;
99
- let doneModules = 0;
100
- const activeModules = [];
101
-
102
- const update = module => {
103
- handler(
104
- 0.1 + (doneModules / Math.max(lastModulesCount, moduleCount)) * 0.6,
105
- "building modules",
106
- `${doneModules}/${moduleCount} modules`,
107
- `${activeModules.length} active`,
108
- activeModules[activeModules.length - 1]
109
- );
110
- };
111
-
112
- const moduleDone = module => {
113
- doneModules++;
114
- const ident = module.identifier();
115
- if (ident) {
116
- const idx = activeModules.indexOf(ident);
117
- if (idx >= 0) activeModules.splice(idx, 1);
118
- }
119
- update();
120
- };
121
- compiler.hooks.compilation.tap("ProgressPlugin", compilation => {
122
- if (compilation.compiler.isChild()) return;
123
- lastModulesCount = moduleCount;
124
- moduleCount = 0;
125
- doneModules = 0;
126
- handler(0, "compiling");
127
- compilation.hooks.buildModule.tap("ProgressPlugin", module => {
128
- moduleCount++;
129
- const ident = module.identifier();
130
- if (ident) {
131
- activeModules.push(ident);
132
- }
133
- update();
134
- });
135
- compilation.hooks.failedModule.tap("ProgressPlugin", moduleDone);
136
- compilation.hooks.succeedModule.tap("ProgressPlugin", moduleDone);
137
- const hooks = {
138
- finishModules: "finish module graph",
139
- seal: "sealing",
140
- optimizeDependenciesBasic: "basic dependencies optimization",
141
- optimizeDependencies: "dependencies optimization",
142
- optimizeDependenciesAdvanced: "advanced dependencies optimization",
143
- afterOptimizeDependencies: "after dependencies optimization",
144
- optimize: "optimizing",
145
- optimizeModulesBasic: "basic module optimization",
146
- optimizeModules: "module optimization",
147
- optimizeModulesAdvanced: "advanced module optimization",
148
- afterOptimizeModules: "after module optimization",
149
- optimizeChunksBasic: "basic chunk optimization",
150
- optimizeChunks: "chunk optimization",
151
- optimizeChunksAdvanced: "advanced chunk optimization",
152
- afterOptimizeChunks: "after chunk optimization",
153
- optimizeTree: "module and chunk tree optimization",
154
- afterOptimizeTree: "after module and chunk tree optimization",
155
- optimizeChunkModulesBasic: "basic chunk modules optimization",
156
- optimizeChunkModules: "chunk modules optimization",
157
- optimizeChunkModulesAdvanced: "advanced chunk modules optimization",
158
- afterOptimizeChunkModules: "after chunk modules optimization",
159
- reviveModules: "module reviving",
160
- optimizeModuleOrder: "module order optimization",
161
- advancedOptimizeModuleOrder: "advanced module order optimization",
162
- beforeModuleIds: "before module ids",
163
- moduleIds: "module ids",
164
- optimizeModuleIds: "module id optimization",
165
- afterOptimizeModuleIds: "module id optimization",
166
- reviveChunks: "chunk reviving",
167
- optimizeChunkOrder: "chunk order optimization",
168
- beforeChunkIds: "before chunk ids",
169
- optimizeChunkIds: "chunk id optimization",
170
- afterOptimizeChunkIds: "after chunk id optimization",
171
- recordModules: "record modules",
172
- recordChunks: "record chunks",
173
- beforeHash: "hashing",
174
- afterHash: "after hashing",
175
- recordHash: "record hash",
176
- beforeModuleAssets: "module assets processing",
177
- beforeChunkAssets: "chunk assets processing",
178
- additionalChunkAssets: "additional chunk assets processing",
179
- record: "recording",
180
- additionalAssets: "additional asset processing",
181
- optimizeChunkAssets: "chunk asset optimization",
182
- afterOptimizeChunkAssets: "after chunk asset optimization",
183
- optimizeAssets: "asset optimization",
184
- afterOptimizeAssets: "after asset optimization",
185
- afterSeal: "after seal"
186
- };
187
- const numberOfHooks = Object.keys(hooks).length;
188
- Object.keys(hooks).forEach((name, idx) => {
189
- const title = hooks[name];
190
- const percentage = (idx / numberOfHooks) * 0.25 + 0.7;
191
- compilation.hooks[name].intercept({
192
- name: "ProgressPlugin",
193
- context: true,
194
- call: () => {
195
- handler(percentage, title);
196
- },
197
- tap: (context, tap) => {
198
- if (context) {
199
- // p is percentage from 0 to 1
200
- // args is any number of messages in a hierarchical matter
201
- context.reportProgress = (p, ...args) => {
202
- handler(percentage, title, tap.name, ...args);
203
- };
204
- }
205
- handler(percentage, title, tap.name);
206
- }
207
- });
208
- });
209
- });
210
- compiler.hooks.emit.intercept({
211
- name: "ProgressPlugin",
212
- context: true,
213
- call: () => {
214
- handler(0.95, "emitting");
215
- },
216
- tap: (context, tap) => {
217
- if (context) {
218
- context.reportProgress = (p, ...args) => {
219
- handler(0.95, "emitting", tap.name, ...args);
220
- };
221
- }
222
- handler(0.95, "emitting", tap.name);
223
- }
224
- });
225
- compiler.hooks.afterEmit.intercept({
226
- name: "ProgressPlugin",
227
- context: true,
228
- call: () => {
229
- handler(0.98, "after emitting");
230
- },
231
- tap: (context, tap) => {
232
- if (context) {
233
- context.reportProgress = (p, ...args) => {
234
- handler(0.98, "after emitting", tap.name, ...args);
235
- };
236
- }
237
- handler(0.98, "after emitting", tap.name);
238
- }
239
- });
240
- compiler.hooks.done.tap("ProgressPlugin", () => {
241
- handler(1, "");
242
- });
243
- }
244
- }
245
- }
246
- module.exports = ProgressPlugin;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ const createDefaultHandler = profile => {
8
+ let lineCaretPosition = 0;
9
+ let lastState;
10
+ let lastStateTime;
11
+
12
+ const defaultHandler = (percentage, msg, ...args) => {
13
+ let state = msg;
14
+ const details = args;
15
+ if (percentage < 1) {
16
+ percentage = Math.floor(percentage * 100);
17
+ msg = `${percentage}% ${msg}`;
18
+ if (percentage < 100) {
19
+ msg = ` ${msg}`;
20
+ }
21
+ if (percentage < 10) {
22
+ msg = ` ${msg}`;
23
+ }
24
+ for (let detail of details) {
25
+ if (!detail) continue;
26
+ if (detail.length > 40) {
27
+ detail = `…${detail.substr(detail.length - 39)}`;
28
+ }
29
+ msg += ` ${detail}`;
30
+ }
31
+ }
32
+ if (profile) {
33
+ state = state.replace(/^\d+\/\d+\s+/, "");
34
+ if (percentage === 0) {
35
+ lastState = null;
36
+ lastStateTime = Date.now();
37
+ } else if (state !== lastState || percentage === 1) {
38
+ const now = Date.now();
39
+ if (lastState) {
40
+ const stateMsg = `${now - lastStateTime}ms ${lastState}`;
41
+ goToLineStart(stateMsg);
42
+ process.stderr.write(stateMsg + "\n");
43
+ lineCaretPosition = 0;
44
+ }
45
+ lastState = state;
46
+ lastStateTime = now;
47
+ }
48
+ }
49
+ goToLineStart(msg);
50
+ process.stderr.write(msg);
51
+ };
52
+
53
+ const goToLineStart = nextMessage => {
54
+ let str = "";
55
+ for (; lineCaretPosition > nextMessage.length; lineCaretPosition--) {
56
+ str += "\b \b";
57
+ }
58
+ for (var i = 0; i < lineCaretPosition; i++) {
59
+ str += "\b";
60
+ }
61
+ lineCaretPosition = nextMessage.length;
62
+ if (str) process.stderr.write(str);
63
+ };
64
+
65
+ return defaultHandler;
66
+ };
67
+
68
+ class ProgressPlugin {
69
+ constructor(options) {
70
+ if (typeof options === "function") {
71
+ options = {
72
+ handler: options
73
+ };
74
+ }
75
+ options = options || {};
76
+ this.profile = options.profile;
77
+ this.handler = options.handler;
78
+ }
79
+
80
+ apply(compiler) {
81
+ const handler = this.handler || createDefaultHandler(this.profile);
82
+ if (compiler.compilers) {
83
+ const states = new Array(compiler.compilers.length);
84
+ compiler.compilers.forEach((compiler, idx) => {
85
+ new ProgressPlugin((p, msg, ...args) => {
86
+ states[idx] = [p, msg, ...args];
87
+ handler(
88
+ states
89
+ .map(state => (state && state[0]) || 0)
90
+ .reduce((a, b) => a + b) / states.length,
91
+ `[${idx}] ${msg}`,
92
+ ...args
93
+ );
94
+ }).apply(compiler);
95
+ });
96
+ } else {
97
+ let lastModulesCount = 0;
98
+ let moduleCount = 500;
99
+ let doneModules = 0;
100
+ const activeModules = [];
101
+
102
+ const update = module => {
103
+ handler(
104
+ 0.1 + (doneModules / Math.max(lastModulesCount, moduleCount)) * 0.6,
105
+ "building modules",
106
+ `${doneModules}/${moduleCount} modules`,
107
+ `${activeModules.length} active`,
108
+ activeModules[activeModules.length - 1]
109
+ );
110
+ };
111
+
112
+ const moduleDone = module => {
113
+ doneModules++;
114
+ const ident = module.identifier();
115
+ if (ident) {
116
+ const idx = activeModules.indexOf(ident);
117
+ if (idx >= 0) activeModules.splice(idx, 1);
118
+ }
119
+ update();
120
+ };
121
+ compiler.hooks.compilation.tap("ProgressPlugin", compilation => {
122
+ if (compilation.compiler.isChild()) return;
123
+ lastModulesCount = moduleCount;
124
+ moduleCount = 0;
125
+ doneModules = 0;
126
+ handler(0, "compiling");
127
+ compilation.hooks.buildModule.tap("ProgressPlugin", module => {
128
+ moduleCount++;
129
+ const ident = module.identifier();
130
+ if (ident) {
131
+ activeModules.push(ident);
132
+ }
133
+ update();
134
+ });
135
+ compilation.hooks.failedModule.tap("ProgressPlugin", moduleDone);
136
+ compilation.hooks.succeedModule.tap("ProgressPlugin", moduleDone);
137
+ const hooks = {
138
+ finishModules: "finish module graph",
139
+ seal: "sealing",
140
+ optimizeDependenciesBasic: "basic dependencies optimization",
141
+ optimizeDependencies: "dependencies optimization",
142
+ optimizeDependenciesAdvanced: "advanced dependencies optimization",
143
+ afterOptimizeDependencies: "after dependencies optimization",
144
+ optimize: "optimizing",
145
+ optimizeModulesBasic: "basic module optimization",
146
+ optimizeModules: "module optimization",
147
+ optimizeModulesAdvanced: "advanced module optimization",
148
+ afterOptimizeModules: "after module optimization",
149
+ optimizeChunksBasic: "basic chunk optimization",
150
+ optimizeChunks: "chunk optimization",
151
+ optimizeChunksAdvanced: "advanced chunk optimization",
152
+ afterOptimizeChunks: "after chunk optimization",
153
+ optimizeTree: "module and chunk tree optimization",
154
+ afterOptimizeTree: "after module and chunk tree optimization",
155
+ optimizeChunkModulesBasic: "basic chunk modules optimization",
156
+ optimizeChunkModules: "chunk modules optimization",
157
+ optimizeChunkModulesAdvanced: "advanced chunk modules optimization",
158
+ afterOptimizeChunkModules: "after chunk modules optimization",
159
+ reviveModules: "module reviving",
160
+ optimizeModuleOrder: "module order optimization",
161
+ advancedOptimizeModuleOrder: "advanced module order optimization",
162
+ beforeModuleIds: "before module ids",
163
+ moduleIds: "module ids",
164
+ optimizeModuleIds: "module id optimization",
165
+ afterOptimizeModuleIds: "module id optimization",
166
+ reviveChunks: "chunk reviving",
167
+ optimizeChunkOrder: "chunk order optimization",
168
+ beforeChunkIds: "before chunk ids",
169
+ optimizeChunkIds: "chunk id optimization",
170
+ afterOptimizeChunkIds: "after chunk id optimization",
171
+ recordModules: "record modules",
172
+ recordChunks: "record chunks",
173
+ beforeHash: "hashing",
174
+ afterHash: "after hashing",
175
+ recordHash: "record hash",
176
+ beforeModuleAssets: "module assets processing",
177
+ beforeChunkAssets: "chunk assets processing",
178
+ additionalChunkAssets: "additional chunk assets processing",
179
+ record: "recording",
180
+ additionalAssets: "additional asset processing",
181
+ optimizeChunkAssets: "chunk asset optimization",
182
+ afterOptimizeChunkAssets: "after chunk asset optimization",
183
+ optimizeAssets: "asset optimization",
184
+ afterOptimizeAssets: "after asset optimization",
185
+ afterSeal: "after seal"
186
+ };
187
+ const numberOfHooks = Object.keys(hooks).length;
188
+ Object.keys(hooks).forEach((name, idx) => {
189
+ const title = hooks[name];
190
+ const percentage = (idx / numberOfHooks) * 0.25 + 0.7;
191
+ compilation.hooks[name].intercept({
192
+ name: "ProgressPlugin",
193
+ context: true,
194
+ call: () => {
195
+ handler(percentage, title);
196
+ },
197
+ tap: (context, tap) => {
198
+ if (context) {
199
+ // p is percentage from 0 to 1
200
+ // args is any number of messages in a hierarchical matter
201
+ context.reportProgress = (p, ...args) => {
202
+ handler(percentage, title, tap.name, ...args);
203
+ };
204
+ }
205
+ handler(percentage, title, tap.name);
206
+ }
207
+ });
208
+ });
209
+ });
210
+ compiler.hooks.emit.intercept({
211
+ name: "ProgressPlugin",
212
+ context: true,
213
+ call: () => {
214
+ handler(0.95, "emitting");
215
+ },
216
+ tap: (context, tap) => {
217
+ if (context) {
218
+ context.reportProgress = (p, ...args) => {
219
+ handler(0.95, "emitting", tap.name, ...args);
220
+ };
221
+ }
222
+ handler(0.95, "emitting", tap.name);
223
+ }
224
+ });
225
+ compiler.hooks.afterEmit.intercept({
226
+ name: "ProgressPlugin",
227
+ context: true,
228
+ call: () => {
229
+ handler(0.98, "after emitting");
230
+ },
231
+ tap: (context, tap) => {
232
+ if (context) {
233
+ context.reportProgress = (p, ...args) => {
234
+ handler(0.98, "after emitting", tap.name, ...args);
235
+ };
236
+ }
237
+ handler(0.98, "after emitting", tap.name);
238
+ }
239
+ });
240
+ compiler.hooks.done.tap("ProgressPlugin", () => {
241
+ handler(1, "");
242
+ });
243
+ }
244
+ }
245
+ }
246
+ module.exports = ProgressPlugin;
@@ -1,86 +1,86 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
-
7
- const ParserHelpers = require("./ParserHelpers");
8
- const ConstDependency = require("./dependencies/ConstDependency");
9
-
10
- const NullFactory = require("./NullFactory");
11
-
12
- class ProvidePlugin {
13
- constructor(definitions) {
14
- this.definitions = definitions;
15
- }
16
-
17
- apply(compiler) {
18
- const definitions = this.definitions;
19
- compiler.hooks.compilation.tap(
20
- "ProvidePlugin",
21
- (compilation, { normalModuleFactory }) => {
22
- compilation.dependencyFactories.set(ConstDependency, new NullFactory());
23
- compilation.dependencyTemplates.set(
24
- ConstDependency,
25
- new ConstDependency.Template()
26
- );
27
- const handler = (parser, parserOptions) => {
28
- Object.keys(definitions).forEach(name => {
29
- var request = [].concat(definitions[name]);
30
- var splittedName = name.split(".");
31
- if (splittedName.length > 0) {
32
- splittedName.slice(1).forEach((_, i) => {
33
- const name = splittedName.slice(0, i + 1).join(".");
34
- parser.hooks.canRename
35
- .for(name)
36
- .tap("ProvidePlugin", ParserHelpers.approve);
37
- });
38
- }
39
- parser.hooks.expression.for(name).tap("ProvidePlugin", expr => {
40
- let nameIdentifier = name;
41
- const scopedName = name.includes(".");
42
- let expression = `require(${JSON.stringify(request[0])})`;
43
- if (scopedName) {
44
- nameIdentifier = `__webpack_provided_${name.replace(
45
- /\./g,
46
- "_dot_"
47
- )}`;
48
- }
49
- if (request.length > 1) {
50
- expression += request
51
- .slice(1)
52
- .map(r => `[${JSON.stringify(r)}]`)
53
- .join("");
54
- }
55
- if (
56
- !ParserHelpers.addParsedVariableToModule(
57
- parser,
58
- nameIdentifier,
59
- expression
60
- )
61
- ) {
62
- return false;
63
- }
64
- if (scopedName) {
65
- ParserHelpers.toConstantDependency(parser, nameIdentifier)(
66
- expr
67
- );
68
- }
69
- return true;
70
- });
71
- });
72
- };
73
- normalModuleFactory.hooks.parser
74
- .for("javascript/auto")
75
- .tap("ProvidePlugin", handler);
76
- normalModuleFactory.hooks.parser
77
- .for("javascript/dynamic")
78
- .tap("ProvidePlugin", handler);
79
- normalModuleFactory.hooks.parser
80
- .for("javascript/esm")
81
- .tap("ProvidePlugin", handler);
82
- }
83
- );
84
- }
85
- }
86
- module.exports = ProvidePlugin;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ const ParserHelpers = require("./ParserHelpers");
8
+ const ConstDependency = require("./dependencies/ConstDependency");
9
+
10
+ const NullFactory = require("./NullFactory");
11
+
12
+ class ProvidePlugin {
13
+ constructor(definitions) {
14
+ this.definitions = definitions;
15
+ }
16
+
17
+ apply(compiler) {
18
+ const definitions = this.definitions;
19
+ compiler.hooks.compilation.tap(
20
+ "ProvidePlugin",
21
+ (compilation, { normalModuleFactory }) => {
22
+ compilation.dependencyFactories.set(ConstDependency, new NullFactory());
23
+ compilation.dependencyTemplates.set(
24
+ ConstDependency,
25
+ new ConstDependency.Template()
26
+ );
27
+ const handler = (parser, parserOptions) => {
28
+ Object.keys(definitions).forEach(name => {
29
+ var request = [].concat(definitions[name]);
30
+ var splittedName = name.split(".");
31
+ if (splittedName.length > 0) {
32
+ splittedName.slice(1).forEach((_, i) => {
33
+ const name = splittedName.slice(0, i + 1).join(".");
34
+ parser.hooks.canRename
35
+ .for(name)
36
+ .tap("ProvidePlugin", ParserHelpers.approve);
37
+ });
38
+ }
39
+ parser.hooks.expression.for(name).tap("ProvidePlugin", expr => {
40
+ let nameIdentifier = name;
41
+ const scopedName = name.includes(".");
42
+ let expression = `require(${JSON.stringify(request[0])})`;
43
+ if (scopedName) {
44
+ nameIdentifier = `__webpack_provided_${name.replace(
45
+ /\./g,
46
+ "_dot_"
47
+ )}`;
48
+ }
49
+ if (request.length > 1) {
50
+ expression += request
51
+ .slice(1)
52
+ .map(r => `[${JSON.stringify(r)}]`)
53
+ .join("");
54
+ }
55
+ if (
56
+ !ParserHelpers.addParsedVariableToModule(
57
+ parser,
58
+ nameIdentifier,
59
+ expression
60
+ )
61
+ ) {
62
+ return false;
63
+ }
64
+ if (scopedName) {
65
+ ParserHelpers.toConstantDependency(parser, nameIdentifier)(
66
+ expr
67
+ );
68
+ }
69
+ return true;
70
+ });
71
+ });
72
+ };
73
+ normalModuleFactory.hooks.parser
74
+ .for("javascript/auto")
75
+ .tap("ProvidePlugin", handler);
76
+ normalModuleFactory.hooks.parser
77
+ .for("javascript/dynamic")
78
+ .tap("ProvidePlugin", handler);
79
+ normalModuleFactory.hooks.parser
80
+ .for("javascript/esm")
81
+ .tap("ProvidePlugin", handler);
82
+ }
83
+ );
84
+ }
85
+ }
86
+ module.exports = ProvidePlugin;