webpack 3.8.0 → 3.8.1

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 (198) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +716 -716
  3. package/buildin/.eslintrc +7 -7
  4. package/buildin/amd-define.js +3 -3
  5. package/buildin/amd-options.js +2 -2
  6. package/buildin/global.js +21 -21
  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/.eslintrc +9 -9
  11. package/hot/dev-server.js +53 -53
  12. package/hot/emitter.js +2 -2
  13. package/hot/log-apply-result.js +38 -38
  14. package/hot/log.js +44 -44
  15. package/hot/only-dev-server.js +71 -71
  16. package/hot/poll.js +34 -34
  17. package/hot/signal.js +51 -51
  18. package/lib/APIPlugin.js +45 -45
  19. package/lib/AsyncDependenciesBlock.js +43 -43
  20. package/lib/AutomaticPrefetchPlugin.js +36 -36
  21. package/lib/BasicEvaluatedExpression.js +203 -203
  22. package/lib/CaseSensitiveModulesWarning.js +49 -49
  23. package/lib/ChunkRenderError.js +24 -24
  24. package/lib/ChunkTemplate.js +36 -36
  25. package/lib/CompatibilityPlugin.js +57 -57
  26. package/lib/Compiler.js +523 -523
  27. package/lib/ConstPlugin.js +60 -60
  28. package/lib/ContextModule.js +431 -431
  29. package/lib/ContextReplacementPlugin.js +111 -111
  30. package/lib/DefinePlugin.js +123 -123
  31. package/lib/DelegatedModule.js +98 -98
  32. package/lib/DelegatedModuleFactoryPlugin.js +59 -59
  33. package/lib/DelegatedPlugin.js +30 -30
  34. package/lib/DependenciesBlockVariable.js +51 -51
  35. package/lib/DllEntryPlugin.js +37 -37
  36. package/lib/DllModule.js +58 -58
  37. package/lib/DllModuleFactory.js +20 -20
  38. package/lib/DllPlugin.js +38 -38
  39. package/lib/DllReferencePlugin.js +62 -62
  40. package/lib/DynamicEntryPlugin.js +59 -59
  41. package/lib/EntryModuleNotFoundError.js +22 -22
  42. package/lib/EntryOptionPlugin.js +31 -31
  43. package/lib/EnvironmentPlugin.js +50 -50
  44. package/lib/ErrorHelpers.js +31 -31
  45. package/lib/EvalDevToolModulePlugin.js +22 -22
  46. package/lib/EvalDevToolModuleTemplatePlugin.js +33 -33
  47. package/lib/EvalSourceMapDevToolModuleTemplatePlugin.js +75 -75
  48. package/lib/EvalSourceMapDevToolPlugin.js +32 -32
  49. package/lib/ExportPropertyMainTemplatePlugin.js +31 -31
  50. package/lib/ExtendedAPIPlugin.js +47 -47
  51. package/lib/ExternalModuleFactoryPlugin.js +91 -91
  52. package/lib/ExternalsPlugin.js +21 -21
  53. package/lib/FlagDependencyExportsPlugin.js +101 -101
  54. package/lib/FunctionModulePlugin.js +24 -24
  55. package/lib/HashedModuleIdsPlugin.js +42 -42
  56. package/lib/HotUpdateChunkTemplate.js +31 -31
  57. package/lib/IgnorePlugin.js +69 -69
  58. package/lib/JsonpExportMainTemplatePlugin.js +37 -37
  59. package/lib/JsonpHotUpdateChunkTemplatePlugin.js +27 -27
  60. package/lib/JsonpTemplatePlugin.js +21 -21
  61. package/lib/LibManifestPlugin.js +63 -63
  62. package/lib/LibraryTemplatePlugin.js +92 -92
  63. package/lib/LoaderOptionsPlugin.js +36 -36
  64. package/lib/LoaderTargetPlugin.js +19 -19
  65. package/lib/MemoryOutputFileSystem.js +5 -5
  66. package/lib/ModuleBuildError.js +42 -42
  67. package/lib/ModuleDependencyError.js +22 -22
  68. package/lib/ModuleDependencyWarning.js +22 -22
  69. package/lib/ModuleError.js +24 -24
  70. package/lib/ModuleFilenameHelpers.js +162 -162
  71. package/lib/ModuleNotFoundError.js +26 -26
  72. package/lib/ModuleReason.js +50 -50
  73. package/lib/ModuleTemplate.js +23 -23
  74. package/lib/ModuleWarning.js +24 -24
  75. package/lib/MovedToPluginWarningPlugin.js +21 -21
  76. package/lib/MultiCompiler.js +164 -164
  77. package/lib/MultiEntryPlugin.js +39 -39
  78. package/lib/MultiModuleFactory.js +19 -19
  79. package/lib/MultiStats.js +79 -79
  80. package/lib/MultiWatching.js +32 -32
  81. package/lib/NamedChunksPlugin.js +30 -30
  82. package/lib/NamedModulesPlugin.js +27 -27
  83. package/lib/NewWatchingPlugin.js +15 -15
  84. package/lib/NoEmitOnErrorsPlugin.js +22 -22
  85. package/lib/NoErrorsPlugin.js +29 -29
  86. package/lib/NodeStuffPlugin.js +97 -97
  87. package/lib/NormalModuleReplacementPlugin.js +45 -45
  88. package/lib/NullFactory.js +12 -12
  89. package/lib/OptionsApply.js +10 -10
  90. package/lib/ParserHelpers.js +85 -85
  91. package/lib/PrefetchPlugin.js +31 -31
  92. package/lib/ProgressPlugin.js +192 -192
  93. package/lib/ProvidePlugin.js +55 -55
  94. package/lib/RawModule.js +54 -54
  95. package/lib/RequestShortener.js +63 -63
  96. package/lib/RequireJsStuffPlugin.js +31 -31
  97. package/lib/RuleSet.js +444 -444
  98. package/lib/SetVarMainTemplatePlugin.js +41 -41
  99. package/lib/SingleEntryPlugin.js +35 -35
  100. package/lib/SizeFormatHelpers.js +18 -18
  101. package/lib/SourceMapDevToolModuleOptionsPlugin.js +37 -37
  102. package/lib/UnsupportedFeatureWarning.js +21 -21
  103. package/lib/UseStrictPlugin.js +34 -34
  104. package/lib/WarnCaseSensitiveModulesPlugin.js +31 -31
  105. package/lib/WatchIgnorePlugin.js +49 -49
  106. package/lib/WebpackError.js +11 -11
  107. package/lib/WebpackOptionsDefaulter.js +129 -129
  108. package/lib/WebpackOptionsValidationError.js +196 -196
  109. package/lib/compareLocations.js +36 -36
  110. package/lib/dependencies/AMDDefineDependency.js +142 -142
  111. package/lib/dependencies/AMDPlugin.js +119 -119
  112. package/lib/dependencies/AMDRequireDependenciesBlock.js +33 -33
  113. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +177 -177
  114. package/lib/dependencies/AMDRequireDependency.js +67 -67
  115. package/lib/dependencies/AMDRequireItemDependency.js +22 -22
  116. package/lib/dependencies/CommonJsRequireDependency.js +22 -22
  117. package/lib/dependencies/CommonJsRequireDependencyParserPlugin.js +89 -89
  118. package/lib/dependencies/ConstDependency.js +32 -32
  119. package/lib/dependencies/ContextDependencyHelpers.js +71 -71
  120. package/lib/dependencies/ContextElementDependency.js +21 -21
  121. package/lib/dependencies/CriticalDependencyWarning.js +20 -20
  122. package/lib/dependencies/DelegatedExportsDependency.js +33 -33
  123. package/lib/dependencies/DelegatedSourceDependency.js +18 -18
  124. package/lib/dependencies/DllEntryDependency.js +20 -20
  125. package/lib/dependencies/HarmonyCompatibilityDependency.js +30 -30
  126. package/lib/dependencies/HarmonyExportHeaderDependency.js +28 -28
  127. package/lib/dependencies/ImportDependenciesBlock.js +17 -17
  128. package/lib/dependencies/ImportEagerContextDependency.js +22 -22
  129. package/lib/dependencies/ImportLazyContextDependency.js +22 -22
  130. package/lib/dependencies/ImportLazyOnceContextDependency.js +22 -22
  131. package/lib/dependencies/ImportParserPlugin.js +89 -89
  132. package/lib/dependencies/ImportPlugin.js +60 -60
  133. package/lib/dependencies/ImportWeakContextDependency.js +22 -22
  134. package/lib/dependencies/LoaderDependency.js +18 -18
  135. package/lib/dependencies/LoaderPlugin.js +60 -60
  136. package/lib/dependencies/LocalModule.js +23 -23
  137. package/lib/dependencies/LocalModuleDependency.js +24 -24
  138. package/lib/dependencies/LocalModulesHelpers.js +46 -46
  139. package/lib/dependencies/ModuleDependency.js +23 -23
  140. package/lib/dependencies/ModuleHotAcceptDependency.js +23 -23
  141. package/lib/dependencies/ModuleHotDeclineDependency.js +23 -23
  142. package/lib/dependencies/MultiEntryDependency.js +20 -20
  143. package/lib/dependencies/NullDependency.js +24 -24
  144. package/lib/dependencies/PrefetchDependency.js +18 -18
  145. package/lib/dependencies/RequireContextDependency.js +26 -26
  146. package/lib/dependencies/RequireContextDependencyParserPlugin.js +50 -50
  147. package/lib/dependencies/RequireContextPlugin.js +96 -96
  148. package/lib/dependencies/RequireEnsureDependenciesBlock.js +22 -22
  149. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +102 -102
  150. package/lib/dependencies/RequireEnsureDependency.js +38 -38
  151. package/lib/dependencies/RequireEnsureItemDependency.js +21 -21
  152. package/lib/dependencies/RequireEnsurePlugin.js +40 -40
  153. package/lib/dependencies/RequireHeaderDependency.js +26 -26
  154. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +21 -21
  155. package/lib/dependencies/RequireIncludePlugin.js +33 -33
  156. package/lib/dependencies/RequireResolveDependency.js +22 -22
  157. package/lib/dependencies/RequireResolveDependencyParserPlugin.js +71 -71
  158. package/lib/dependencies/RequireResolveHeaderDependency.js +26 -26
  159. package/lib/dependencies/SingleEntryDependency.js +18 -18
  160. package/lib/dependencies/SystemPlugin.js +44 -44
  161. package/lib/dependencies/UnsupportedDependency.js +23 -23
  162. package/lib/dependencies/WebpackMissingModule.js +18 -18
  163. package/lib/dependencies/getFunctionExpression.js +44 -44
  164. package/lib/formatLocation.js +54 -54
  165. package/lib/node/NodeChunkTemplatePlugin.js +27 -27
  166. package/lib/node/NodeEnvironmentPlugin.js +25 -25
  167. package/lib/node/NodeHotUpdateChunkTemplatePlugin.js +27 -27
  168. package/lib/node/NodeMainTemplate.runtime.js +24 -24
  169. package/lib/node/NodeMainTemplateAsync.runtime.js +40 -40
  170. package/lib/node/NodeOutputFileSystem.js +22 -22
  171. package/lib/node/NodeSourcePlugin.js +88 -88
  172. package/lib/node/NodeTargetPlugin.js +15 -15
  173. package/lib/node/NodeTemplatePlugin.js +27 -27
  174. package/lib/node/NodeWatchFileSystem.js +72 -72
  175. package/lib/optimize/ChunkModuleIdRangePlugin.js +53 -53
  176. package/lib/optimize/DedupePlugin.js +15 -15
  177. package/lib/optimize/FlagIncludedChunksPlugin.js +35 -35
  178. package/lib/optimize/LimitChunkCountPlugin.js +59 -59
  179. package/lib/optimize/MinChunkSizePlugin.js +65 -65
  180. package/lib/optimize/RemoveEmptyChunksPlugin.js +21 -21
  181. package/lib/optimize/UglifyJsPlugin.js +9 -9
  182. package/lib/performance/AssetsOverSizeLimitWarning.js +23 -23
  183. package/lib/performance/EntrypointsOverSizeLimitWarning.js +28 -28
  184. package/lib/performance/NoAsyncChunksWarning.js +20 -20
  185. package/lib/performance/SizeLimitsPlugin.js +102 -102
  186. package/lib/prepareOptions.js +29 -29
  187. package/lib/removeAndDo.js +15 -15
  188. package/lib/util/Semaphore.js +32 -32
  189. package/lib/util/identifier.js +38 -38
  190. package/lib/validateSchema.js +66 -66
  191. package/lib/web/WebEnvironmentPlugin.js +18 -18
  192. package/lib/webworker/WebWorkerChunkTemplatePlugin.js +29 -29
  193. package/lib/webworker/WebWorkerHotUpdateChunkTemplatePlugin.js +28 -28
  194. package/lib/webworker/WebWorkerMainTemplate.runtime.js +58 -58
  195. package/lib/webworker/WebWorkerTemplatePlugin.js +20 -20
  196. package/package.json +1 -1
  197. package/schemas/ajv.absolutePath.js +29 -29
  198. package/schemas/webpackOptionsSchema.json +16 -0
@@ -1,85 +1,85 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
- const path = require("path");
7
-
8
- const BasicEvaluatedExpression = require("./BasicEvaluatedExpression");
9
- const ConstDependency = require("./dependencies/ConstDependency");
10
- const UnsupportedFeatureWarning = require("./UnsupportedFeatureWarning");
11
-
12
- const ParserHelpers = exports;
13
-
14
- ParserHelpers.addParsedVariableToModule = function(parser, name, expression) {
15
- if(!parser.state.current.addVariable) return false;
16
- var deps = [];
17
- parser.parse(expression, {
18
- current: {
19
- addDependency: function(dep) {
20
- dep.userRequest = name;
21
- deps.push(dep);
22
- }
23
- },
24
- module: parser.state.module
25
- });
26
- parser.state.current.addVariable(name, expression, deps);
27
- return true;
28
- };
29
-
30
- ParserHelpers.requireFileAsExpression = function(context, pathToModule) {
31
- var moduleJsPath = path.relative(context, pathToModule);
32
- if(!/^[A-Z]:/i.test(moduleJsPath)) {
33
- moduleJsPath = "./" + moduleJsPath.replace(/\\/g, "/");
34
- }
35
- return "require(" + JSON.stringify(moduleJsPath) + ")";
36
- };
37
-
38
- ParserHelpers.toConstantDependency = function(value) {
39
- return function constDependency(expr) {
40
- var dep = new ConstDependency(value, expr.range);
41
- dep.loc = expr.loc;
42
- this.state.current.addDependency(dep);
43
- return true;
44
- };
45
- };
46
-
47
- ParserHelpers.evaluateToString = function(value) {
48
- return function stringExpression(expr) {
49
- return new BasicEvaluatedExpression().setString(value).setRange(expr.range);
50
- };
51
- };
52
-
53
- ParserHelpers.evaluateToBoolean = function(value) {
54
- return function booleanExpression(expr) {
55
- return new BasicEvaluatedExpression().setBoolean(value).setRange(expr.range);
56
- };
57
- };
58
-
59
- ParserHelpers.evaluateToIdentifier = function(identifier, truthy) {
60
- return function identifierExpression(expr) {
61
- let evex = new BasicEvaluatedExpression().setIdentifier(identifier).setRange(expr.range);
62
- if(truthy === true) evex = evex.setTruthy();
63
- else if(truthy === false) evex = evex.setFalsy();
64
- return evex;
65
- };
66
- };
67
-
68
- ParserHelpers.expressionIsUnsupported = function(message) {
69
- return function unsupportedExpression(expr) {
70
- var dep = new ConstDependency("(void 0)", expr.range);
71
- dep.loc = expr.loc;
72
- this.state.current.addDependency(dep);
73
- if(!this.state.module) return;
74
- this.state.module.warnings.push(new UnsupportedFeatureWarning(this.state.module, message));
75
- return true;
76
- };
77
- };
78
-
79
- ParserHelpers.skipTraversal = function skipTraversal() {
80
- return true;
81
- };
82
-
83
- ParserHelpers.approve = function approve() {
84
- return true;
85
- };
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+ const path = require("path");
7
+
8
+ const BasicEvaluatedExpression = require("./BasicEvaluatedExpression");
9
+ const ConstDependency = require("./dependencies/ConstDependency");
10
+ const UnsupportedFeatureWarning = require("./UnsupportedFeatureWarning");
11
+
12
+ const ParserHelpers = exports;
13
+
14
+ ParserHelpers.addParsedVariableToModule = function(parser, name, expression) {
15
+ if(!parser.state.current.addVariable) return false;
16
+ var deps = [];
17
+ parser.parse(expression, {
18
+ current: {
19
+ addDependency: function(dep) {
20
+ dep.userRequest = name;
21
+ deps.push(dep);
22
+ }
23
+ },
24
+ module: parser.state.module
25
+ });
26
+ parser.state.current.addVariable(name, expression, deps);
27
+ return true;
28
+ };
29
+
30
+ ParserHelpers.requireFileAsExpression = function(context, pathToModule) {
31
+ var moduleJsPath = path.relative(context, pathToModule);
32
+ if(!/^[A-Z]:/i.test(moduleJsPath)) {
33
+ moduleJsPath = "./" + moduleJsPath.replace(/\\/g, "/");
34
+ }
35
+ return "require(" + JSON.stringify(moduleJsPath) + ")";
36
+ };
37
+
38
+ ParserHelpers.toConstantDependency = function(value) {
39
+ return function constDependency(expr) {
40
+ var dep = new ConstDependency(value, expr.range);
41
+ dep.loc = expr.loc;
42
+ this.state.current.addDependency(dep);
43
+ return true;
44
+ };
45
+ };
46
+
47
+ ParserHelpers.evaluateToString = function(value) {
48
+ return function stringExpression(expr) {
49
+ return new BasicEvaluatedExpression().setString(value).setRange(expr.range);
50
+ };
51
+ };
52
+
53
+ ParserHelpers.evaluateToBoolean = function(value) {
54
+ return function booleanExpression(expr) {
55
+ return new BasicEvaluatedExpression().setBoolean(value).setRange(expr.range);
56
+ };
57
+ };
58
+
59
+ ParserHelpers.evaluateToIdentifier = function(identifier, truthy) {
60
+ return function identifierExpression(expr) {
61
+ let evex = new BasicEvaluatedExpression().setIdentifier(identifier).setRange(expr.range);
62
+ if(truthy === true) evex = evex.setTruthy();
63
+ else if(truthy === false) evex = evex.setFalsy();
64
+ return evex;
65
+ };
66
+ };
67
+
68
+ ParserHelpers.expressionIsUnsupported = function(message) {
69
+ return function unsupportedExpression(expr) {
70
+ var dep = new ConstDependency("(void 0)", expr.range);
71
+ dep.loc = expr.loc;
72
+ this.state.current.addDependency(dep);
73
+ if(!this.state.module) return;
74
+ this.state.module.warnings.push(new UnsupportedFeatureWarning(this.state.module, message));
75
+ return true;
76
+ };
77
+ };
78
+
79
+ ParserHelpers.skipTraversal = function skipTraversal() {
80
+ return true;
81
+ };
82
+
83
+ ParserHelpers.approve = function approve() {
84
+ return true;
85
+ };
@@ -1,31 +1,31 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
- const PrefetchDependency = require("./dependencies/PrefetchDependency");
7
-
8
- class PrefetchPlugin {
9
-
10
- constructor(context, request) {
11
- if(!request) {
12
- this.request = context;
13
- } else {
14
- this.context = context;
15
- this.request = request;
16
- }
17
- }
18
-
19
- apply(compiler) {
20
- compiler.plugin("compilation", (compilation, params) => {
21
- const normalModuleFactory = params.normalModuleFactory;
22
-
23
- compilation.dependencyFactories.set(PrefetchDependency, normalModuleFactory);
24
- });
25
- compiler.plugin("make", (compilation, callback) => {
26
- compilation.prefetch(this.context || compiler.context, new PrefetchDependency(this.request), callback);
27
- });
28
- }
29
-
30
- }
31
- module.exports = PrefetchPlugin;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+ const PrefetchDependency = require("./dependencies/PrefetchDependency");
7
+
8
+ class PrefetchPlugin {
9
+
10
+ constructor(context, request) {
11
+ if(!request) {
12
+ this.request = context;
13
+ } else {
14
+ this.context = context;
15
+ this.request = request;
16
+ }
17
+ }
18
+
19
+ apply(compiler) {
20
+ compiler.plugin("compilation", (compilation, params) => {
21
+ const normalModuleFactory = params.normalModuleFactory;
22
+
23
+ compilation.dependencyFactories.set(PrefetchDependency, normalModuleFactory);
24
+ });
25
+ compiler.plugin("make", (compilation, callback) => {
26
+ compilation.prefetch(this.context || compiler.context, new PrefetchDependency(this.request), callback);
27
+ });
28
+ }
29
+
30
+ }
31
+ module.exports = PrefetchPlugin;
@@ -1,192 +1,192 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
-
7
- class ProgressPlugin {
8
-
9
- constructor(options) {
10
- if(typeof options === "function") {
11
- options = {
12
- handler: options
13
- };
14
- }
15
- options = options || {};
16
- this.profile = options.profile;
17
- this.handler = options.handler;
18
- }
19
-
20
- apply(compiler) {
21
- const handler = this.handler || defaultHandler;
22
- const profile = this.profile;
23
- if(compiler.compilers) {
24
- const states = new Array(compiler.compilers.length);
25
- compiler.compilers.forEach(function(compiler, idx) {
26
- compiler.apply(new ProgressPlugin(function(p, msg) {
27
- states[idx] = Array.prototype.slice.apply(arguments);
28
- handler.apply(null, [
29
- states.map(state => state && state[0] || 0).reduce((a, b) => a + b) / states.length,
30
- `[${idx}] ${msg}`
31
- ].concat(Array.prototype.slice.call(arguments, 2)));
32
- }));
33
- });
34
- } else {
35
- let lastModulesCount = 0;
36
- let moduleCount = 500;
37
- let doneModules = 0;
38
- const activeModules = [];
39
-
40
- const update = function update(module) {
41
- handler(
42
- 0.1 + (doneModules / Math.max(lastModulesCount, moduleCount)) * 0.6,
43
- "building modules",
44
- `${doneModules}/${moduleCount} modules`,
45
- `${activeModules.length} active`,
46
- activeModules[activeModules.length - 1]
47
- );
48
- };
49
-
50
- const moduleDone = function moduleDone(module) {
51
- doneModules++;
52
- const ident = module.identifier();
53
- if(ident) {
54
- const idx = activeModules.indexOf(ident);
55
- if(idx >= 0) activeModules.splice(idx, 1);
56
- }
57
- update();
58
- };
59
- compiler.plugin("compilation", function(compilation) {
60
- if(compilation.compiler.isChild()) return;
61
- lastModulesCount = moduleCount;
62
- moduleCount = 0;
63
- doneModules = 0;
64
- handler(0, "compiling");
65
- compilation.plugin("build-module", function(module) {
66
- moduleCount++;
67
- const ident = module.identifier();
68
- if(ident) {
69
- activeModules.push(ident);
70
- }
71
- update();
72
- });
73
- compilation.plugin("failed-module", moduleDone);
74
- compilation.plugin("succeed-module", moduleDone);
75
- const syncHooks = {
76
- "seal": [0.71, "sealing"],
77
- "optimize": [0.72, "optimizing"],
78
- "optimize-modules-basic": [0.73, "basic module optimization"],
79
- "optimize-modules": [0.74, "module optimization"],
80
- "optimize-modules-advanced": [0.75, "advanced module optimization"],
81
- "optimize-chunks-basic": [0.76, "basic chunk optimization"],
82
- "optimize-chunks": [0.77, "chunk optimization"],
83
- "optimize-chunks-advanced": [0.78, "advanced chunk optimization"],
84
- // optimize-tree
85
- "optimize-chunk-modules": [0.80, "chunk modules optimization"],
86
- "optimize-chunk-modules-advanced": [0.81, "advanced chunk modules optimization"],
87
- "revive-modules": [0.82, "module reviving"],
88
- "optimize-module-order": [0.83, "module order optimization"],
89
- "optimize-module-ids": [0.84, "module id optimization"],
90
- "revive-chunks": [0.85, "chunk reviving"],
91
- "optimize-chunk-order": [0.86, "chunk order optimization"],
92
- "optimize-chunk-ids": [0.87, "chunk id optimization"],
93
- "before-hash": [0.88, "hashing"],
94
- "before-module-assets": [0.89, "module assets processing"],
95
- "before-chunk-assets": [0.90, "chunk assets processing"],
96
- "additional-chunk-assets": [0.91, "additional chunk assets processing"],
97
- "record": [0.92, "recording"]
98
- };
99
- Object.keys(syncHooks).forEach(name => {
100
- let pass = 0;
101
- const settings = syncHooks[name];
102
- compilation.plugin(name, () => {
103
- if(pass++ > 0)
104
- handler(settings[0], settings[1], `pass ${pass}`);
105
- else
106
- handler(settings[0], settings[1]);
107
- });
108
- });
109
- compilation.plugin("optimize-tree", (chunks, modules, callback) => {
110
- handler(0.79, "module and chunk tree optimization");
111
- callback();
112
- });
113
- compilation.plugin("additional-assets", callback => {
114
- handler(0.91, "additional asset processing");
115
- callback();
116
- });
117
- compilation.plugin("optimize-chunk-assets", (chunks, callback) => {
118
- handler(0.92, "chunk asset optimization");
119
- callback();
120
- });
121
- compilation.plugin("optimize-assets", (assets, callback) => {
122
- handler(0.94, "asset optimization");
123
- callback();
124
- });
125
- });
126
- compiler.plugin("emit", (compilation, callback) => {
127
- handler(0.95, "emitting");
128
- callback();
129
- });
130
- compiler.plugin("done", () => {
131
- handler(1, "");
132
- });
133
- }
134
-
135
- let lineCaretPosition = 0,
136
- lastState, lastStateTime;
137
-
138
- function defaultHandler(percentage, msg) {
139
- let state = msg;
140
- const details = Array.prototype.slice.call(arguments, 2);
141
- if(percentage < 1) {
142
- percentage = Math.floor(percentage * 100);
143
- msg = `${percentage}% ${msg}`;
144
- if(percentage < 100) {
145
- msg = ` ${msg}`;
146
- }
147
- if(percentage < 10) {
148
- msg = ` ${msg}`;
149
- }
150
- details.forEach(detail => {
151
- if(!detail) return;
152
- if(detail.length > 40) {
153
- detail = `...${detail.substr(detail.length - 37)}`;
154
- }
155
- msg += ` ${detail}`;
156
- });
157
- }
158
- if(profile) {
159
- state = state.replace(/^\d+\/\d+\s+/, "");
160
- if(percentage === 0) {
161
- lastState = null;
162
- lastStateTime = Date.now();
163
- } else if(state !== lastState || percentage === 1) {
164
- const now = Date.now();
165
- if(lastState) {
166
- const stateMsg = `${now - lastStateTime}ms ${lastState}`;
167
- goToLineStart(stateMsg);
168
- process.stderr.write(stateMsg + "\n");
169
- lineCaretPosition = 0;
170
- }
171
- lastState = state;
172
- lastStateTime = now;
173
- }
174
- }
175
- goToLineStart(msg);
176
- process.stderr.write(msg);
177
- }
178
-
179
- function goToLineStart(nextMessage) {
180
- let str = "";
181
- for(; lineCaretPosition > nextMessage.length; lineCaretPosition--) {
182
- str += "\b \b";
183
- }
184
- for(var i = 0; i < lineCaretPosition; i++) {
185
- str += "\b";
186
- }
187
- lineCaretPosition = nextMessage.length;
188
- if(str) process.stderr.write(str);
189
- }
190
- }
191
- }
192
- 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
+ class ProgressPlugin {
8
+
9
+ constructor(options) {
10
+ if(typeof options === "function") {
11
+ options = {
12
+ handler: options
13
+ };
14
+ }
15
+ options = options || {};
16
+ this.profile = options.profile;
17
+ this.handler = options.handler;
18
+ }
19
+
20
+ apply(compiler) {
21
+ const handler = this.handler || defaultHandler;
22
+ const profile = this.profile;
23
+ if(compiler.compilers) {
24
+ const states = new Array(compiler.compilers.length);
25
+ compiler.compilers.forEach(function(compiler, idx) {
26
+ compiler.apply(new ProgressPlugin(function(p, msg) {
27
+ states[idx] = Array.prototype.slice.apply(arguments);
28
+ handler.apply(null, [
29
+ states.map(state => state && state[0] || 0).reduce((a, b) => a + b) / states.length,
30
+ `[${idx}] ${msg}`
31
+ ].concat(Array.prototype.slice.call(arguments, 2)));
32
+ }));
33
+ });
34
+ } else {
35
+ let lastModulesCount = 0;
36
+ let moduleCount = 500;
37
+ let doneModules = 0;
38
+ const activeModules = [];
39
+
40
+ const update = function update(module) {
41
+ handler(
42
+ 0.1 + (doneModules / Math.max(lastModulesCount, moduleCount)) * 0.6,
43
+ "building modules",
44
+ `${doneModules}/${moduleCount} modules`,
45
+ `${activeModules.length} active`,
46
+ activeModules[activeModules.length - 1]
47
+ );
48
+ };
49
+
50
+ const moduleDone = function moduleDone(module) {
51
+ doneModules++;
52
+ const ident = module.identifier();
53
+ if(ident) {
54
+ const idx = activeModules.indexOf(ident);
55
+ if(idx >= 0) activeModules.splice(idx, 1);
56
+ }
57
+ update();
58
+ };
59
+ compiler.plugin("compilation", function(compilation) {
60
+ if(compilation.compiler.isChild()) return;
61
+ lastModulesCount = moduleCount;
62
+ moduleCount = 0;
63
+ doneModules = 0;
64
+ handler(0, "compiling");
65
+ compilation.plugin("build-module", function(module) {
66
+ moduleCount++;
67
+ const ident = module.identifier();
68
+ if(ident) {
69
+ activeModules.push(ident);
70
+ }
71
+ update();
72
+ });
73
+ compilation.plugin("failed-module", moduleDone);
74
+ compilation.plugin("succeed-module", moduleDone);
75
+ const syncHooks = {
76
+ "seal": [0.71, "sealing"],
77
+ "optimize": [0.72, "optimizing"],
78
+ "optimize-modules-basic": [0.73, "basic module optimization"],
79
+ "optimize-modules": [0.74, "module optimization"],
80
+ "optimize-modules-advanced": [0.75, "advanced module optimization"],
81
+ "optimize-chunks-basic": [0.76, "basic chunk optimization"],
82
+ "optimize-chunks": [0.77, "chunk optimization"],
83
+ "optimize-chunks-advanced": [0.78, "advanced chunk optimization"],
84
+ // optimize-tree
85
+ "optimize-chunk-modules": [0.80, "chunk modules optimization"],
86
+ "optimize-chunk-modules-advanced": [0.81, "advanced chunk modules optimization"],
87
+ "revive-modules": [0.82, "module reviving"],
88
+ "optimize-module-order": [0.83, "module order optimization"],
89
+ "optimize-module-ids": [0.84, "module id optimization"],
90
+ "revive-chunks": [0.85, "chunk reviving"],
91
+ "optimize-chunk-order": [0.86, "chunk order optimization"],
92
+ "optimize-chunk-ids": [0.87, "chunk id optimization"],
93
+ "before-hash": [0.88, "hashing"],
94
+ "before-module-assets": [0.89, "module assets processing"],
95
+ "before-chunk-assets": [0.90, "chunk assets processing"],
96
+ "additional-chunk-assets": [0.91, "additional chunk assets processing"],
97
+ "record": [0.92, "recording"]
98
+ };
99
+ Object.keys(syncHooks).forEach(name => {
100
+ let pass = 0;
101
+ const settings = syncHooks[name];
102
+ compilation.plugin(name, () => {
103
+ if(pass++ > 0)
104
+ handler(settings[0], settings[1], `pass ${pass}`);
105
+ else
106
+ handler(settings[0], settings[1]);
107
+ });
108
+ });
109
+ compilation.plugin("optimize-tree", (chunks, modules, callback) => {
110
+ handler(0.79, "module and chunk tree optimization");
111
+ callback();
112
+ });
113
+ compilation.plugin("additional-assets", callback => {
114
+ handler(0.91, "additional asset processing");
115
+ callback();
116
+ });
117
+ compilation.plugin("optimize-chunk-assets", (chunks, callback) => {
118
+ handler(0.92, "chunk asset optimization");
119
+ callback();
120
+ });
121
+ compilation.plugin("optimize-assets", (assets, callback) => {
122
+ handler(0.94, "asset optimization");
123
+ callback();
124
+ });
125
+ });
126
+ compiler.plugin("emit", (compilation, callback) => {
127
+ handler(0.95, "emitting");
128
+ callback();
129
+ });
130
+ compiler.plugin("done", () => {
131
+ handler(1, "");
132
+ });
133
+ }
134
+
135
+ let lineCaretPosition = 0,
136
+ lastState, lastStateTime;
137
+
138
+ function defaultHandler(percentage, msg) {
139
+ let state = msg;
140
+ const details = Array.prototype.slice.call(arguments, 2);
141
+ if(percentage < 1) {
142
+ percentage = Math.floor(percentage * 100);
143
+ msg = `${percentage}% ${msg}`;
144
+ if(percentage < 100) {
145
+ msg = ` ${msg}`;
146
+ }
147
+ if(percentage < 10) {
148
+ msg = ` ${msg}`;
149
+ }
150
+ details.forEach(detail => {
151
+ if(!detail) return;
152
+ if(detail.length > 40) {
153
+ detail = `...${detail.substr(detail.length - 37)}`;
154
+ }
155
+ msg += ` ${detail}`;
156
+ });
157
+ }
158
+ if(profile) {
159
+ state = state.replace(/^\d+\/\d+\s+/, "");
160
+ if(percentage === 0) {
161
+ lastState = null;
162
+ lastStateTime = Date.now();
163
+ } else if(state !== lastState || percentage === 1) {
164
+ const now = Date.now();
165
+ if(lastState) {
166
+ const stateMsg = `${now - lastStateTime}ms ${lastState}`;
167
+ goToLineStart(stateMsg);
168
+ process.stderr.write(stateMsg + "\n");
169
+ lineCaretPosition = 0;
170
+ }
171
+ lastState = state;
172
+ lastStateTime = now;
173
+ }
174
+ }
175
+ goToLineStart(msg);
176
+ process.stderr.write(msg);
177
+ }
178
+
179
+ function goToLineStart(nextMessage) {
180
+ let str = "";
181
+ for(; lineCaretPosition > nextMessage.length; lineCaretPosition--) {
182
+ str += "\b \b";
183
+ }
184
+ for(var i = 0; i < lineCaretPosition; i++) {
185
+ str += "\b";
186
+ }
187
+ lineCaretPosition = nextMessage.length;
188
+ if(str) process.stderr.write(str);
189
+ }
190
+ }
191
+ }
192
+ module.exports = ProgressPlugin;