webpack 3.6.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 (229) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +716 -716
  3. package/bin/convert-argv.js +1 -1
  4. package/bin/webpack.js +6 -0
  5. package/buildin/.eslintrc +7 -7
  6. package/buildin/amd-define.js +3 -3
  7. package/buildin/amd-options.js +2 -2
  8. package/buildin/global.js +21 -21
  9. package/buildin/harmony-module.js +24 -24
  10. package/buildin/module.js +22 -22
  11. package/buildin/system.js +7 -7
  12. package/hot/.eslintrc +9 -9
  13. package/hot/dev-server.js +53 -53
  14. package/hot/emitter.js +2 -2
  15. package/hot/log-apply-result.js +38 -38
  16. package/hot/log.js +44 -44
  17. package/hot/only-dev-server.js +71 -71
  18. package/hot/poll.js +34 -34
  19. package/hot/signal.js +51 -51
  20. package/lib/APIPlugin.js +45 -45
  21. package/lib/AsyncDependenciesBlock.js +43 -43
  22. package/lib/AsyncDependencyToInitialChunkWarning.js +21 -0
  23. package/lib/AutomaticPrefetchPlugin.js +36 -36
  24. package/lib/BasicEvaluatedExpression.js +203 -203
  25. package/lib/CaseSensitiveModulesWarning.js +49 -49
  26. package/lib/Chunk.js +3 -0
  27. package/lib/ChunkRenderError.js +24 -24
  28. package/lib/ChunkTemplate.js +36 -36
  29. package/lib/CompatibilityPlugin.js +57 -57
  30. package/lib/Compilation.js +158 -51
  31. package/lib/Compiler.js +523 -523
  32. package/lib/ConstPlugin.js +60 -60
  33. package/lib/ContextExclusionPlugin.js +17 -0
  34. package/lib/ContextModule.js +431 -431
  35. package/lib/ContextModuleFactory.js +14 -5
  36. package/lib/ContextReplacementPlugin.js +111 -111
  37. package/lib/DefinePlugin.js +123 -123
  38. package/lib/DelegatedModule.js +98 -92
  39. package/lib/DelegatedModuleFactoryPlugin.js +59 -59
  40. package/lib/DelegatedPlugin.js +30 -30
  41. package/lib/DependenciesBlockVariable.js +51 -51
  42. package/lib/DllEntryPlugin.js +37 -37
  43. package/lib/DllModule.js +58 -58
  44. package/lib/DllModuleFactory.js +20 -20
  45. package/lib/DllPlugin.js +38 -38
  46. package/lib/DllReferencePlugin.js +62 -62
  47. package/lib/DynamicEntryPlugin.js +59 -59
  48. package/lib/EntryModuleNotFoundError.js +22 -22
  49. package/lib/EntryOptionPlugin.js +31 -31
  50. package/lib/EnvironmentPlugin.js +50 -50
  51. package/lib/ErrorHelpers.js +31 -31
  52. package/lib/EvalDevToolModulePlugin.js +22 -22
  53. package/lib/EvalDevToolModuleTemplatePlugin.js +33 -33
  54. package/lib/EvalSourceMapDevToolModuleTemplatePlugin.js +75 -75
  55. package/lib/EvalSourceMapDevToolPlugin.js +32 -32
  56. package/lib/ExportPropertyMainTemplatePlugin.js +31 -31
  57. package/lib/ExtendedAPIPlugin.js +47 -47
  58. package/lib/ExternalModule.js +7 -0
  59. package/lib/ExternalModuleFactoryPlugin.js +91 -91
  60. package/lib/ExternalsPlugin.js +21 -21
  61. package/lib/FlagDependencyExportsPlugin.js +101 -101
  62. package/lib/FunctionModulePlugin.js +24 -24
  63. package/lib/FunctionModuleTemplatePlugin.js +7 -3
  64. package/lib/HashedModuleIdsPlugin.js +42 -42
  65. package/lib/HotUpdateChunkTemplate.js +31 -31
  66. package/lib/IgnorePlugin.js +69 -69
  67. package/lib/JsonpExportMainTemplatePlugin.js +37 -37
  68. package/lib/JsonpHotUpdateChunkTemplatePlugin.js +27 -27
  69. package/lib/JsonpMainTemplate.runtime.js +2 -1
  70. package/lib/JsonpMainTemplatePlugin.js +2 -0
  71. package/lib/JsonpTemplatePlugin.js +21 -21
  72. package/lib/LibManifestPlugin.js +63 -63
  73. package/lib/LibraryTemplatePlugin.js +92 -92
  74. package/lib/LoaderOptionsPlugin.js +36 -36
  75. package/lib/LoaderTargetPlugin.js +19 -19
  76. package/lib/MemoryOutputFileSystem.js +5 -5
  77. package/lib/ModuleBuildError.js +42 -42
  78. package/lib/ModuleDependencyError.js +22 -22
  79. package/lib/ModuleDependencyWarning.js +22 -22
  80. package/lib/ModuleError.js +24 -24
  81. package/lib/ModuleFilenameHelpers.js +162 -162
  82. package/lib/ModuleNotFoundError.js +26 -26
  83. package/lib/ModuleParseError.js +1 -1
  84. package/lib/ModuleReason.js +50 -50
  85. package/lib/ModuleTemplate.js +23 -23
  86. package/lib/ModuleWarning.js +24 -24
  87. package/lib/MovedToPluginWarningPlugin.js +21 -21
  88. package/lib/MultiCompiler.js +164 -164
  89. package/lib/MultiEntryPlugin.js +39 -39
  90. package/lib/MultiModuleFactory.js +19 -19
  91. package/lib/MultiStats.js +79 -79
  92. package/lib/MultiWatching.js +32 -32
  93. package/lib/NamedChunksPlugin.js +30 -30
  94. package/lib/NamedModulesPlugin.js +27 -27
  95. package/lib/NewWatchingPlugin.js +15 -15
  96. package/lib/NoEmitOnErrorsPlugin.js +22 -22
  97. package/lib/NoErrorsPlugin.js +29 -29
  98. package/lib/NodeStuffPlugin.js +97 -97
  99. package/lib/NormalModuleReplacementPlugin.js +45 -45
  100. package/lib/NullFactory.js +12 -12
  101. package/lib/OptionsApply.js +10 -10
  102. package/lib/Parser.js +65 -34
  103. package/lib/ParserHelpers.js +85 -85
  104. package/lib/PrefetchPlugin.js +31 -31
  105. package/lib/ProgressPlugin.js +192 -192
  106. package/lib/ProvidePlugin.js +55 -55
  107. package/lib/RawModule.js +54 -54
  108. package/lib/RequestShortener.js +63 -63
  109. package/lib/RequireJsStuffPlugin.js +31 -31
  110. package/lib/RuleSet.js +444 -444
  111. package/lib/SetVarMainTemplatePlugin.js +41 -41
  112. package/lib/SingleEntryPlugin.js +35 -35
  113. package/lib/SizeFormatHelpers.js +18 -18
  114. package/lib/SourceMapDevToolModuleOptionsPlugin.js +37 -37
  115. package/lib/Stats.js +27 -8
  116. package/lib/UmdMainTemplatePlugin.js +1 -1
  117. package/lib/UnsupportedFeatureWarning.js +21 -21
  118. package/lib/UseStrictPlugin.js +34 -34
  119. package/lib/WarnCaseSensitiveModulesPlugin.js +31 -31
  120. package/lib/WatchIgnorePlugin.js +49 -49
  121. package/lib/WebpackError.js +11 -11
  122. package/lib/WebpackOptionsDefaulter.js +129 -129
  123. package/lib/WebpackOptionsValidationError.js +196 -196
  124. package/lib/compareLocations.js +36 -36
  125. package/lib/dependencies/AMDDefineDependency.js +142 -142
  126. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +5 -1
  127. package/lib/dependencies/AMDPlugin.js +119 -119
  128. package/lib/dependencies/AMDRequireArrayDependency.js +2 -0
  129. package/lib/dependencies/AMDRequireContextDependency.js +0 -9
  130. package/lib/dependencies/AMDRequireDependenciesBlock.js +33 -33
  131. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +177 -177
  132. package/lib/dependencies/AMDRequireDependency.js +67 -67
  133. package/lib/dependencies/AMDRequireItemDependency.js +22 -22
  134. package/lib/dependencies/CommonJsRequireContextDependency.js +0 -10
  135. package/lib/dependencies/CommonJsRequireDependency.js +22 -22
  136. package/lib/dependencies/CommonJsRequireDependencyParserPlugin.js +89 -89
  137. package/lib/dependencies/ConstDependency.js +32 -32
  138. package/lib/dependencies/ContextDependency.js +20 -0
  139. package/lib/dependencies/ContextDependencyHelpers.js +71 -71
  140. package/lib/dependencies/ContextElementDependency.js +21 -21
  141. package/lib/dependencies/CriticalDependencyWarning.js +20 -20
  142. package/lib/dependencies/DelegatedExportsDependency.js +33 -33
  143. package/lib/dependencies/DelegatedSourceDependency.js +18 -18
  144. package/lib/dependencies/DllEntryDependency.js +20 -20
  145. package/lib/dependencies/HarmonyCompatibilityDependency.js +30 -30
  146. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +14 -2
  147. package/lib/dependencies/HarmonyExportExpressionDependency.js +0 -7
  148. package/lib/dependencies/HarmonyExportHeaderDependency.js +28 -28
  149. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +45 -45
  150. package/lib/dependencies/HarmonyExportSpecifierDependency.js +0 -13
  151. package/lib/dependencies/HarmonyModulesHelpers.js +0 -53
  152. package/lib/dependencies/ImportContextDependency.js +0 -10
  153. package/lib/dependencies/ImportDependenciesBlock.js +17 -17
  154. package/lib/dependencies/ImportEagerContextDependency.js +22 -22
  155. package/lib/dependencies/ImportLazyContextDependency.js +22 -22
  156. package/lib/dependencies/ImportLazyOnceContextDependency.js +22 -22
  157. package/lib/dependencies/ImportParserPlugin.js +89 -89
  158. package/lib/dependencies/ImportPlugin.js +60 -60
  159. package/lib/dependencies/ImportWeakContextDependency.js +22 -22
  160. package/lib/dependencies/LoaderDependency.js +18 -18
  161. package/lib/dependencies/LoaderPlugin.js +60 -60
  162. package/lib/dependencies/LocalModule.js +23 -23
  163. package/lib/dependencies/LocalModuleDependency.js +24 -24
  164. package/lib/dependencies/LocalModulesHelpers.js +46 -46
  165. package/lib/dependencies/ModuleDependency.js +23 -23
  166. package/lib/dependencies/ModuleHotAcceptDependency.js +23 -23
  167. package/lib/dependencies/ModuleHotDeclineDependency.js +23 -23
  168. package/lib/dependencies/MultiEntryDependency.js +20 -20
  169. package/lib/dependencies/NullDependency.js +24 -24
  170. package/lib/dependencies/PrefetchDependency.js +18 -18
  171. package/lib/dependencies/RequireContextDependency.js +26 -26
  172. package/lib/dependencies/RequireContextDependencyParserPlugin.js +50 -50
  173. package/lib/dependencies/RequireContextPlugin.js +96 -96
  174. package/lib/dependencies/RequireEnsureDependenciesBlock.js +22 -22
  175. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +102 -102
  176. package/lib/dependencies/RequireEnsureDependency.js +38 -38
  177. package/lib/dependencies/RequireEnsureItemDependency.js +21 -21
  178. package/lib/dependencies/RequireEnsurePlugin.js +40 -40
  179. package/lib/dependencies/RequireHeaderDependency.js +26 -26
  180. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +21 -21
  181. package/lib/dependencies/RequireIncludePlugin.js +33 -33
  182. package/lib/dependencies/RequireResolveContextDependency.js +0 -10
  183. package/lib/dependencies/RequireResolveDependency.js +22 -22
  184. package/lib/dependencies/RequireResolveDependencyParserPlugin.js +71 -71
  185. package/lib/dependencies/RequireResolveHeaderDependency.js +26 -26
  186. package/lib/dependencies/SingleEntryDependency.js +18 -18
  187. package/lib/dependencies/SystemPlugin.js +44 -44
  188. package/lib/dependencies/UnsupportedDependency.js +23 -23
  189. package/lib/dependencies/WebpackMissingModule.js +18 -18
  190. package/lib/dependencies/getFunctionExpression.js +44 -44
  191. package/lib/formatLocation.js +54 -54
  192. package/lib/node/NodeChunkTemplatePlugin.js +27 -27
  193. package/lib/node/NodeEnvironmentPlugin.js +25 -25
  194. package/lib/node/NodeHotUpdateChunkTemplatePlugin.js +27 -27
  195. package/lib/node/NodeMainTemplate.runtime.js +24 -24
  196. package/lib/node/NodeMainTemplateAsync.runtime.js +40 -40
  197. package/lib/node/NodeOutputFileSystem.js +22 -22
  198. package/lib/node/NodeSourcePlugin.js +88 -88
  199. package/lib/node/NodeTargetPlugin.js +15 -15
  200. package/lib/node/NodeTemplatePlugin.js +27 -27
  201. package/lib/node/NodeWatchFileSystem.js +72 -72
  202. package/lib/optimize/ChunkModuleIdRangePlugin.js +53 -53
  203. package/lib/optimize/CommonsChunkPlugin.js +40 -19
  204. package/lib/optimize/ConcatenatedModule.js +27 -24
  205. package/lib/optimize/DedupePlugin.js +15 -15
  206. package/lib/optimize/FlagIncludedChunksPlugin.js +35 -35
  207. package/lib/optimize/LimitChunkCountPlugin.js +59 -59
  208. package/lib/optimize/MinChunkSizePlugin.js +65 -65
  209. package/lib/optimize/RemoveEmptyChunksPlugin.js +21 -21
  210. package/lib/optimize/UglifyJsPlugin.js +9 -9
  211. package/lib/performance/AssetsOverSizeLimitWarning.js +23 -23
  212. package/lib/performance/EntrypointsOverSizeLimitWarning.js +28 -28
  213. package/lib/performance/NoAsyncChunksWarning.js +20 -20
  214. package/lib/performance/SizeLimitsPlugin.js +102 -102
  215. package/lib/prepareOptions.js +29 -29
  216. package/lib/removeAndDo.js +15 -15
  217. package/lib/util/Queue.js +42 -0
  218. package/lib/util/Semaphore.js +32 -32
  219. package/lib/util/identifier.js +38 -38
  220. package/lib/validateSchema.js +66 -66
  221. package/lib/web/WebEnvironmentPlugin.js +18 -18
  222. package/lib/webpack.js +1 -0
  223. package/lib/webworker/WebWorkerChunkTemplatePlugin.js +29 -29
  224. package/lib/webworker/WebWorkerHotUpdateChunkTemplatePlugin.js +28 -28
  225. package/lib/webworker/WebWorkerMainTemplate.runtime.js +58 -58
  226. package/lib/webworker/WebWorkerTemplatePlugin.js +20 -20
  227. package/package.json +1 -1
  228. package/schemas/ajv.absolutePath.js +29 -29
  229. package/schemas/webpackOptionsSchema.json +69 -0
@@ -1,88 +1,88 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
- const AliasPlugin = require("enhanced-resolve/lib/AliasPlugin");
7
- const ParserHelpers = require("../ParserHelpers");
8
- const nodeLibsBrowser = require("node-libs-browser");
9
-
10
- module.exports = class NodeSourcePlugin {
11
- constructor(options) {
12
- this.options = options;
13
- }
14
- apply(compiler) {
15
- const options = this.options;
16
- if(options === false) // allow single kill switch to turn off this plugin
17
- return;
18
-
19
- function getPathToModule(module, type) {
20
- if(type === true || (type === undefined && nodeLibsBrowser[module])) {
21
- if(!nodeLibsBrowser[module]) throw new Error(`No browser version for node.js core module ${module} available`);
22
- return nodeLibsBrowser[module];
23
- } else if(type === "mock") {
24
- return require.resolve(`node-libs-browser/mock/${module}`);
25
- } else if(type === "empty") {
26
- return require.resolve("node-libs-browser/mock/empty");
27
- } else return module;
28
- }
29
-
30
- function addExpression(parser, name, module, type, suffix) {
31
- suffix = suffix || "";
32
- parser.plugin(`expression ${name}`, function() {
33
- if(this.state.module && this.state.module.resource === getPathToModule(module, type)) return;
34
- const mockModule = ParserHelpers.requireFileAsExpression(this.state.module.context, getPathToModule(module, type));
35
- return ParserHelpers.addParsedVariableToModule(this, name, mockModule + suffix);
36
- });
37
- }
38
-
39
- compiler.plugin("compilation", function(compilation, params) {
40
- params.normalModuleFactory.plugin("parser", function(parser, parserOptions) {
41
-
42
- if(parserOptions.node === false)
43
- return;
44
-
45
- let localOptions = options;
46
- if(parserOptions.node)
47
- localOptions = Object.assign({}, localOptions, parserOptions.node);
48
-
49
- if(localOptions.global) {
50
- parser.plugin("expression global", function() {
51
- const retrieveGlobalModule = ParserHelpers.requireFileAsExpression(this.state.module.context, require.resolve("../../buildin/global.js"));
52
- return ParserHelpers.addParsedVariableToModule(this, "global", retrieveGlobalModule);
53
- });
54
- }
55
- if(localOptions.process) {
56
- const processType = localOptions.process;
57
- addExpression(parser, "process", "process", processType);
58
- }
59
- if(localOptions.console) {
60
- const consoleType = localOptions.console;
61
- addExpression(parser, "console", "console", consoleType);
62
- }
63
- const bufferType = localOptions.Buffer;
64
- if(bufferType) {
65
- addExpression(parser, "Buffer", "buffer", bufferType, ".Buffer");
66
- }
67
- if(localOptions.setImmediate) {
68
- const setImmediateType = localOptions.setImmediate;
69
- addExpression(parser, "setImmediate", "timers", setImmediateType, ".setImmediate");
70
- addExpression(parser, "clearImmediate", "timers", setImmediateType, ".clearImmediate");
71
- }
72
- });
73
- });
74
- compiler.plugin("after-resolvers", (compiler) => {
75
- Object.keys(nodeLibsBrowser).forEach((lib) => {
76
- if(options[lib] !== false) {
77
- compiler.resolvers.normal.apply(
78
- new AliasPlugin("described-resolve", {
79
- name: lib,
80
- onlyModule: true,
81
- alias: getPathToModule(lib, options[lib])
82
- }, "resolve")
83
- );
84
- }
85
- });
86
- });
87
- }
88
- };
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+ const AliasPlugin = require("enhanced-resolve/lib/AliasPlugin");
7
+ const ParserHelpers = require("../ParserHelpers");
8
+ const nodeLibsBrowser = require("node-libs-browser");
9
+
10
+ module.exports = class NodeSourcePlugin {
11
+ constructor(options) {
12
+ this.options = options;
13
+ }
14
+ apply(compiler) {
15
+ const options = this.options;
16
+ if(options === false) // allow single kill switch to turn off this plugin
17
+ return;
18
+
19
+ function getPathToModule(module, type) {
20
+ if(type === true || (type === undefined && nodeLibsBrowser[module])) {
21
+ if(!nodeLibsBrowser[module]) throw new Error(`No browser version for node.js core module ${module} available`);
22
+ return nodeLibsBrowser[module];
23
+ } else if(type === "mock") {
24
+ return require.resolve(`node-libs-browser/mock/${module}`);
25
+ } else if(type === "empty") {
26
+ return require.resolve("node-libs-browser/mock/empty");
27
+ } else return module;
28
+ }
29
+
30
+ function addExpression(parser, name, module, type, suffix) {
31
+ suffix = suffix || "";
32
+ parser.plugin(`expression ${name}`, function() {
33
+ if(this.state.module && this.state.module.resource === getPathToModule(module, type)) return;
34
+ const mockModule = ParserHelpers.requireFileAsExpression(this.state.module.context, getPathToModule(module, type));
35
+ return ParserHelpers.addParsedVariableToModule(this, name, mockModule + suffix);
36
+ });
37
+ }
38
+
39
+ compiler.plugin("compilation", function(compilation, params) {
40
+ params.normalModuleFactory.plugin("parser", function(parser, parserOptions) {
41
+
42
+ if(parserOptions.node === false)
43
+ return;
44
+
45
+ let localOptions = options;
46
+ if(parserOptions.node)
47
+ localOptions = Object.assign({}, localOptions, parserOptions.node);
48
+
49
+ if(localOptions.global) {
50
+ parser.plugin("expression global", function() {
51
+ const retrieveGlobalModule = ParserHelpers.requireFileAsExpression(this.state.module.context, require.resolve("../../buildin/global.js"));
52
+ return ParserHelpers.addParsedVariableToModule(this, "global", retrieveGlobalModule);
53
+ });
54
+ }
55
+ if(localOptions.process) {
56
+ const processType = localOptions.process;
57
+ addExpression(parser, "process", "process", processType);
58
+ }
59
+ if(localOptions.console) {
60
+ const consoleType = localOptions.console;
61
+ addExpression(parser, "console", "console", consoleType);
62
+ }
63
+ const bufferType = localOptions.Buffer;
64
+ if(bufferType) {
65
+ addExpression(parser, "Buffer", "buffer", bufferType, ".Buffer");
66
+ }
67
+ if(localOptions.setImmediate) {
68
+ const setImmediateType = localOptions.setImmediate;
69
+ addExpression(parser, "setImmediate", "timers", setImmediateType, ".setImmediate");
70
+ addExpression(parser, "clearImmediate", "timers", setImmediateType, ".clearImmediate");
71
+ }
72
+ });
73
+ });
74
+ compiler.plugin("after-resolvers", (compiler) => {
75
+ Object.keys(nodeLibsBrowser).forEach((lib) => {
76
+ if(options[lib] !== false) {
77
+ compiler.resolvers.normal.apply(
78
+ new AliasPlugin("described-resolve", {
79
+ name: lib,
80
+ onlyModule: true,
81
+ alias: getPathToModule(lib, options[lib])
82
+ }, "resolve")
83
+ );
84
+ }
85
+ });
86
+ });
87
+ }
88
+ };
@@ -1,15 +1,15 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
-
7
- const ExternalsPlugin = require("../ExternalsPlugin");
8
-
9
- class NodeTargetPlugin {
10
- apply(compiler) {
11
- new ExternalsPlugin("commonjs", Object.keys(process.binding("natives"))).apply(compiler);
12
- }
13
- }
14
-
15
- module.exports = NodeTargetPlugin;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ const ExternalsPlugin = require("../ExternalsPlugin");
8
+
9
+ class NodeTargetPlugin {
10
+ apply(compiler) {
11
+ new ExternalsPlugin("commonjs", Object.keys(process.binding("natives"))).apply(compiler);
12
+ }
13
+ }
14
+
15
+ module.exports = NodeTargetPlugin;
@@ -1,27 +1,27 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
-
6
- "use strict";
7
-
8
- const NodeMainTemplatePlugin = require("./NodeMainTemplatePlugin");
9
- const NodeChunkTemplatePlugin = require("./NodeChunkTemplatePlugin");
10
- const NodeHotUpdateChunkTemplatePlugin = require("./NodeHotUpdateChunkTemplatePlugin");
11
-
12
- class NodeTemplatePlugin {
13
- constructor(options) {
14
- options = options || {};
15
- this.asyncChunkLoading = options.asyncChunkLoading;
16
- }
17
-
18
- apply(compiler) {
19
- compiler.plugin("this-compilation", (compilation) => {
20
- compilation.mainTemplate.apply(new NodeMainTemplatePlugin(this.asyncChunkLoading));
21
- compilation.chunkTemplate.apply(new NodeChunkTemplatePlugin());
22
- compilation.hotUpdateChunkTemplate.apply(new NodeHotUpdateChunkTemplatePlugin());
23
- });
24
- }
25
- }
26
-
27
- module.exports = NodeTemplatePlugin;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const NodeMainTemplatePlugin = require("./NodeMainTemplatePlugin");
9
+ const NodeChunkTemplatePlugin = require("./NodeChunkTemplatePlugin");
10
+ const NodeHotUpdateChunkTemplatePlugin = require("./NodeHotUpdateChunkTemplatePlugin");
11
+
12
+ class NodeTemplatePlugin {
13
+ constructor(options) {
14
+ options = options || {};
15
+ this.asyncChunkLoading = options.asyncChunkLoading;
16
+ }
17
+
18
+ apply(compiler) {
19
+ compiler.plugin("this-compilation", (compilation) => {
20
+ compilation.mainTemplate.apply(new NodeMainTemplatePlugin(this.asyncChunkLoading));
21
+ compilation.chunkTemplate.apply(new NodeChunkTemplatePlugin());
22
+ compilation.hotUpdateChunkTemplate.apply(new NodeHotUpdateChunkTemplatePlugin());
23
+ });
24
+ }
25
+ }
26
+
27
+ module.exports = NodeTemplatePlugin;
@@ -1,72 +1,72 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
-
7
- const Watchpack = require("watchpack");
8
-
9
- class NodeWatchFileSystem {
10
- constructor(inputFileSystem) {
11
- this.inputFileSystem = inputFileSystem;
12
- this.watcherOptions = {
13
- aggregateTimeout: 0
14
- };
15
- this.watcher = new Watchpack(this.watcherOptions);
16
- }
17
-
18
- watch(files, dirs, missing, startTime, options, callback, callbackUndelayed) {
19
- if(!Array.isArray(files))
20
- throw new Error("Invalid arguments: 'files'");
21
- if(!Array.isArray(dirs))
22
- throw new Error("Invalid arguments: 'dirs'");
23
- if(!Array.isArray(missing))
24
- throw new Error("Invalid arguments: 'missing'");
25
- if(typeof callback !== "function")
26
- throw new Error("Invalid arguments: 'callback'");
27
- if(typeof startTime !== "number" && startTime)
28
- throw new Error("Invalid arguments: 'startTime'");
29
- if(typeof options !== "object")
30
- throw new Error("Invalid arguments: 'options'");
31
- if(typeof callbackUndelayed !== "function" && callbackUndelayed)
32
- throw new Error("Invalid arguments: 'callbackUndelayed'");
33
- const oldWatcher = this.watcher;
34
- this.watcher = new Watchpack(options);
35
-
36
- if(callbackUndelayed)
37
- this.watcher.once("change", callbackUndelayed);
38
-
39
- this.watcher.once("aggregated", (changes, removals) => {
40
- changes = changes.concat(removals);
41
- if(this.inputFileSystem && this.inputFileSystem.purge) {
42
- this.inputFileSystem.purge(changes);
43
- }
44
- const times = this.watcher.getTimes();
45
- callback(null,
46
- changes.filter(file => files.indexOf(file) >= 0).sort(),
47
- changes.filter(file => dirs.indexOf(file) >= 0).sort(),
48
- changes.filter(file => missing.indexOf(file) >= 0).sort(), times, times);
49
- });
50
-
51
- this.watcher.watch(files.concat(missing), dirs.concat(missing), startTime);
52
-
53
- if(oldWatcher) {
54
- oldWatcher.close();
55
- }
56
- return {
57
- close: () => {
58
- if(this.watcher) {
59
- this.watcher.close();
60
- this.watcher = null;
61
- }
62
- },
63
- pause: () => {
64
- if(this.watcher) {
65
- this.watcher.pause();
66
- }
67
- }
68
- };
69
- }
70
- }
71
-
72
- module.exports = NodeWatchFileSystem;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ const Watchpack = require("watchpack");
8
+
9
+ class NodeWatchFileSystem {
10
+ constructor(inputFileSystem) {
11
+ this.inputFileSystem = inputFileSystem;
12
+ this.watcherOptions = {
13
+ aggregateTimeout: 0
14
+ };
15
+ this.watcher = new Watchpack(this.watcherOptions);
16
+ }
17
+
18
+ watch(files, dirs, missing, startTime, options, callback, callbackUndelayed) {
19
+ if(!Array.isArray(files))
20
+ throw new Error("Invalid arguments: 'files'");
21
+ if(!Array.isArray(dirs))
22
+ throw new Error("Invalid arguments: 'dirs'");
23
+ if(!Array.isArray(missing))
24
+ throw new Error("Invalid arguments: 'missing'");
25
+ if(typeof callback !== "function")
26
+ throw new Error("Invalid arguments: 'callback'");
27
+ if(typeof startTime !== "number" && startTime)
28
+ throw new Error("Invalid arguments: 'startTime'");
29
+ if(typeof options !== "object")
30
+ throw new Error("Invalid arguments: 'options'");
31
+ if(typeof callbackUndelayed !== "function" && callbackUndelayed)
32
+ throw new Error("Invalid arguments: 'callbackUndelayed'");
33
+ const oldWatcher = this.watcher;
34
+ this.watcher = new Watchpack(options);
35
+
36
+ if(callbackUndelayed)
37
+ this.watcher.once("change", callbackUndelayed);
38
+
39
+ this.watcher.once("aggregated", (changes, removals) => {
40
+ changes = changes.concat(removals);
41
+ if(this.inputFileSystem && this.inputFileSystem.purge) {
42
+ this.inputFileSystem.purge(changes);
43
+ }
44
+ const times = this.watcher.getTimes();
45
+ callback(null,
46
+ changes.filter(file => files.indexOf(file) >= 0).sort(),
47
+ changes.filter(file => dirs.indexOf(file) >= 0).sort(),
48
+ changes.filter(file => missing.indexOf(file) >= 0).sort(), times, times);
49
+ });
50
+
51
+ this.watcher.watch(files.concat(missing), dirs.concat(missing), startTime);
52
+
53
+ if(oldWatcher) {
54
+ oldWatcher.close();
55
+ }
56
+ return {
57
+ close: () => {
58
+ if(this.watcher) {
59
+ this.watcher.close();
60
+ this.watcher = null;
61
+ }
62
+ },
63
+ pause: () => {
64
+ if(this.watcher) {
65
+ this.watcher.pause();
66
+ }
67
+ }
68
+ };
69
+ }
70
+ }
71
+
72
+ module.exports = NodeWatchFileSystem;
@@ -1,53 +1,53 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
- class ChunkModuleIdRangePlugin {
7
- constructor(options) {
8
- this.options = options;
9
- }
10
- apply(compiler) {
11
- const options = this.options;
12
- compiler.plugin("compilation", (compilation) => {
13
- compilation.plugin("module-ids", (modules) => {
14
- const chunk = this.chunks.find((chunk) => chunk.name === options.name);
15
- if(!chunk) throw new Error("ChunkModuleIdRangePlugin: Chunk with name '" + options.name + "' was not found");
16
- let currentId = options.start;
17
- let chunkModules;
18
- if(options.order) {
19
- chunkModules = chunk.modules.slice();
20
- switch(options.order) {
21
- case "index":
22
- chunkModules.sort((a, b) => {
23
- return a.index - b.index;
24
- });
25
- break;
26
- case "index2":
27
- chunkModules.sort((a, b) => {
28
- return a.index2 - b.index2;
29
- });
30
- break;
31
- default:
32
- throw new Error("ChunkModuleIdRangePlugin: unexpected value of order");
33
- }
34
-
35
- } else {
36
- chunkModules = modules.filter((m) => {
37
- return m.chunks.indexOf(chunk) >= 0;
38
- });
39
- }
40
-
41
- for(let i = 0; i < chunkModules.length; i++) {
42
- const m = chunkModules[i];
43
- if(m.id === null) {
44
- m.id = currentId++;
45
- }
46
- if(options.end && currentId > options.end)
47
- break;
48
- }
49
- });
50
- });
51
- }
52
- }
53
- module.exports = ChunkModuleIdRangePlugin;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+ class ChunkModuleIdRangePlugin {
7
+ constructor(options) {
8
+ this.options = options;
9
+ }
10
+ apply(compiler) {
11
+ const options = this.options;
12
+ compiler.plugin("compilation", (compilation) => {
13
+ compilation.plugin("module-ids", (modules) => {
14
+ const chunk = this.chunks.find((chunk) => chunk.name === options.name);
15
+ if(!chunk) throw new Error("ChunkModuleIdRangePlugin: Chunk with name '" + options.name + "' was not found");
16
+ let currentId = options.start;
17
+ let chunkModules;
18
+ if(options.order) {
19
+ chunkModules = chunk.modules.slice();
20
+ switch(options.order) {
21
+ case "index":
22
+ chunkModules.sort((a, b) => {
23
+ return a.index - b.index;
24
+ });
25
+ break;
26
+ case "index2":
27
+ chunkModules.sort((a, b) => {
28
+ return a.index2 - b.index2;
29
+ });
30
+ break;
31
+ default:
32
+ throw new Error("ChunkModuleIdRangePlugin: unexpected value of order");
33
+ }
34
+
35
+ } else {
36
+ chunkModules = modules.filter((m) => {
37
+ return m.chunks.indexOf(chunk) >= 0;
38
+ });
39
+ }
40
+
41
+ for(let i = 0; i < chunkModules.length; i++) {
42
+ const m = chunkModules[i];
43
+ if(m.id === null) {
44
+ m.id = currentId++;
45
+ }
46
+ if(options.end && currentId > options.end)
47
+ break;
48
+ }
49
+ });
50
+ });
51
+ }
52
+ }
53
+ module.exports = ChunkModuleIdRangePlugin;
@@ -4,6 +4,7 @@
4
4
  */
5
5
  "use strict";
6
6
  let nextIdent = 0;
7
+
7
8
  class CommonsChunkPlugin {
8
9
  constructor(options) {
9
10
  if(arguments.length > 1) {
@@ -31,6 +32,7 @@ The available options are:
31
32
  this.minChunks = normalizedOptions.minChunks;
32
33
  this.selectedChunks = normalizedOptions.selectedChunks;
33
34
  this.children = normalizedOptions.children;
35
+ this.deepChildren = normalizedOptions.deepChildren;
34
36
  this.async = normalizedOptions.async;
35
37
  this.minSize = normalizedOptions.minSize;
36
38
  this.ident = __filename + (nextIdent++);
@@ -76,6 +78,7 @@ You can however specify the name of the async chunk by passing the desired strin
76
78
  minChunks: options.minChunks,
77
79
  selectedChunks: options.chunks,
78
80
  children: options.children,
81
+ deepChildren: options.deepChildren,
79
82
  async: options.async,
80
83
  minSize: options.minSize
81
84
  };
@@ -104,7 +107,7 @@ You can however specify the name of the async chunk by passing the desired strin
104
107
  /**
105
108
  * These chunks are subject to get "common" modules extracted and moved to the common chunk
106
109
  */
107
- const affectedChunks = this.getAffectedChunks(compilation, chunks, targetChunk, targetChunks, idx, this.selectedChunks, this.async, this.children);
110
+ const affectedChunks = this.getAffectedChunks(compilation, chunks, targetChunk, targetChunks, idx, this.selectedChunks, this.async, this.children, this.deepChildren);
108
111
 
109
112
  // bail if no chunk is affected
110
113
  if(!affectedChunks) {
@@ -211,8 +214,39 @@ You can however specify the name of the async chunk by passing the desired strin
211
214
  Take a look at the "name"/"names" or async/children option.`);
212
215
  }
213
216
 
214
- getAffectedChunks(compilation, allChunks, targetChunk, targetChunks, currentIndex, selectedChunks, asyncOption, children) {
215
- const asyncOrNoSelectedChunk = children || asyncOption;
217
+ getAffectedUnnamedChunks(affectedChunks, targetChunk, rootChunk, asyncOption, deepChildrenOption) {
218
+ let chunks = targetChunk.chunks;
219
+ chunks && chunks.forEach((chunk) => {
220
+ if(chunk.isInitial()) {
221
+ return;
222
+ }
223
+ // If all the parents of a chunk are either
224
+ // a) the target chunk we started with
225
+ // b) themselves affected chunks
226
+ // we can assume that this chunk is an affected chunk too, as there is no way a chunk that
227
+ // isn't only depending on the target chunk is a parent of the chunk tested
228
+ if(asyncOption || chunk.parents.every((parentChunk) => parentChunk === rootChunk || affectedChunks.has(parentChunk))) {
229
+ // This check not only dedupes the affectedChunks but also guarantees we avoid endless loops
230
+ if(!affectedChunks.has(chunk)) {
231
+ // We mutate the affected chunks before going deeper, so the deeper levels and other branches
232
+ // have the information of this chunk being affected for their assertion if a chunk should
233
+ // not be affected
234
+ affectedChunks.add(chunk);
235
+
236
+ // We recurse down to all the children of the chunk, applying the same assumption.
237
+ // This guarantees that if a chunk should be an affected chunk,
238
+ // at the latest the last connection to the same chunk meets the
239
+ // condition to add it to the affected chunks.
240
+ if(deepChildrenOption === true) {
241
+ this.getAffectedUnnamedChunks(affectedChunks, chunk, rootChunk, asyncOption, deepChildrenOption);
242
+ }
243
+ }
244
+ }
245
+ });
246
+ }
247
+
248
+ getAffectedChunks(compilation, allChunks, targetChunk, targetChunks, currentIndex, selectedChunks, asyncOption, childrenOption, deepChildrenOption) {
249
+ const asyncOrNoSelectedChunk = childrenOption || asyncOption;
216
250
 
217
251
  if(Array.isArray(selectedChunks)) {
218
252
  return allChunks.filter(chunk => {
@@ -223,22 +257,9 @@ Take a look at the "name"/"names" or async/children option.`);
223
257
  }
224
258
 
225
259
  if(asyncOrNoSelectedChunk) {
226
- // nothing to do here
227
- if(!targetChunk.chunks) {
228
- return [];
229
- }
230
-
231
- return targetChunk.chunks.filter((chunk) => {
232
- // we only are interested in on-demand chunks
233
- if(chunk.isInitial())
234
- return false;
235
-
236
- // we can only move modules from this chunk if the "commonChunk" is the only parent
237
- if(!asyncOption)
238
- return chunk.parents.length === 1;
239
-
240
- return true;
241
- });
260
+ let affectedChunks = new Set();
261
+ this.getAffectedUnnamedChunks(affectedChunks, targetChunk, targetChunk, asyncOption, deepChildrenOption);
262
+ return Array.from(affectedChunks);
242
263
  }
243
264
 
244
265
  /**