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
package/lib/ChunkGroup.js CHANGED
@@ -11,7 +11,6 @@ const compareLocations = require("./compareLocations");
11
11
  /** @typedef {import("./Module")} Module */
12
12
  /** @typedef {import("./ModuleReason")} ModuleReason */
13
13
 
14
- /** @typedef {{id: number}} HasId */
15
14
  /** @typedef {{module: Module, loc: TODO, request: string}} OriginRecord */
16
15
  /** @typedef {string|{name: string}} ChunkGroupOptions */
17
16
 
@@ -26,8 +25,8 @@ const getArray = set => Array.from(set);
26
25
 
27
26
  /**
28
27
  * A convenience method used to sort chunks based on their id's
29
- * @param {HasId} a first sorting comparator
30
- * @param {HasId} b second sorting comparator
28
+ * @param {ChunkGroup} a first sorting comparator
29
+ * @param {ChunkGroup} b second sorting comparator
31
30
  * @returns {1|0|-1} a sorting index to determine order
32
31
  */
33
32
  const sortById = (a, b) => {
@@ -63,6 +62,7 @@ class ChunkGroup {
63
62
  /** @type {number} */
64
63
  this.groupDebugId = debugId++;
65
64
  this.options = options;
65
+ /** @type {SortableSet<ChunkGroup>} */
66
66
  this._children = new SortableSet(undefined, sortById);
67
67
  this._parents = new SortableSet(undefined, sortById);
68
68
  this._blocks = new SortableSet();
@@ -442,7 +442,7 @@ class ChunkGroup {
442
442
  list.sort((a, b) => {
443
443
  const cmp = b.order - a.order;
444
444
  if (cmp !== 0) return cmp;
445
- // TOOD webpack 5 remove this check of compareTo
445
+ // TODO webpack 5 remove this check of compareTo
446
446
  if (a.group.compareTo) {
447
447
  return a.group.compareTo(b.group);
448
448
  }
@@ -1,32 +1,32 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
-
7
- const WebpackError = require("./WebpackError");
8
-
9
- /** @typedef {import("./Chunk")} Chunk */
10
-
11
- class ChunkRenderError extends WebpackError {
12
- /**
13
- * Create a new ChunkRenderError
14
- * @param {Chunk} chunk A chunk
15
- * @param {string} file Related file
16
- * @param {Error} error Original error
17
- */
18
- constructor(chunk, file, error) {
19
- super();
20
-
21
- this.name = "ChunkRenderError";
22
- this.error = error;
23
- this.message = error.message;
24
- this.details = error.stack;
25
- this.file = file;
26
- this.chunk = chunk;
27
-
28
- Error.captureStackTrace(this, this.constructor);
29
- }
30
- }
31
-
32
- module.exports = ChunkRenderError;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ const WebpackError = require("./WebpackError");
8
+
9
+ /** @typedef {import("./Chunk")} Chunk */
10
+
11
+ class ChunkRenderError extends WebpackError {
12
+ /**
13
+ * Create a new ChunkRenderError
14
+ * @param {Chunk} chunk A chunk
15
+ * @param {string} file Related file
16
+ * @param {Error} error Original error
17
+ */
18
+ constructor(chunk, file, error) {
19
+ super();
20
+
21
+ this.name = "ChunkRenderError";
22
+ this.error = error;
23
+ this.message = error.message;
24
+ this.details = error.stack;
25
+ this.file = file;
26
+ this.chunk = chunk;
27
+
28
+ Error.captureStackTrace(this, this.constructor);
29
+ }
30
+ }
31
+
32
+ module.exports = ChunkRenderError;
@@ -6,9 +6,9 @@
6
6
 
7
7
  const WebpackError = require("./WebpackError");
8
8
 
9
- /** @typedef {import("./Module.js")} Module */
9
+ /** @typedef {import("./Module")} Module */
10
10
 
11
- /** @typedef {import("./Dependency.js").DependencyLocation} DependencyLocation */
11
+ /** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
12
12
 
13
13
  class CommentCompilationWarning extends WebpackError {
14
14
  /**
@@ -1,70 +1,70 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
-
7
- const ConstDependency = require("./dependencies/ConstDependency");
8
-
9
- const NullFactory = require("./NullFactory");
10
-
11
- /** @typedef {import("./Compiler.js")} Compiler */
12
-
13
- class CompatibilityPlugin {
14
- /**
15
- * Apply the plugin
16
- * @param {Compiler} compiler Webpack Compiler
17
- * @returns {void}
18
- */
19
- apply(compiler) {
20
- compiler.hooks.compilation.tap(
21
- "CompatibilityPlugin",
22
- (compilation, { normalModuleFactory }) => {
23
- compilation.dependencyFactories.set(ConstDependency, new NullFactory());
24
- compilation.dependencyTemplates.set(
25
- ConstDependency,
26
- new ConstDependency.Template()
27
- );
28
-
29
- normalModuleFactory.hooks.parser
30
- .for("javascript/auto")
31
- .tap("CompatibilityPlugin", (parser, parserOptions) => {
32
- if (
33
- typeof parserOptions.browserify !== "undefined" &&
34
- !parserOptions.browserify
35
- )
36
- return;
37
-
38
- parser.hooks.call
39
- .for("require")
40
- .tap("CompatibilityPlugin", expr => {
41
- // support for browserify style require delegator: "require(o, !0)"
42
- if (expr.arguments.length !== 2) return;
43
- const second = parser.evaluateExpression(expr.arguments[1]);
44
- if (!second.isBoolean()) return;
45
- if (second.asBool() !== true) return;
46
- const dep = new ConstDependency("require", expr.callee.range);
47
- dep.loc = expr.loc;
48
- if (parser.state.current.dependencies.length > 1) {
49
- const last =
50
- parser.state.current.dependencies[
51
- parser.state.current.dependencies.length - 1
52
- ];
53
- if (
54
- last.critical &&
55
- last.options &&
56
- last.options.request === "." &&
57
- last.userRequest === "." &&
58
- last.options.recursive
59
- )
60
- parser.state.current.dependencies.pop();
61
- }
62
- parser.state.current.addDependency(dep);
63
- return true;
64
- });
65
- });
66
- }
67
- );
68
- }
69
- }
70
- module.exports = CompatibilityPlugin;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ const ConstDependency = require("./dependencies/ConstDependency");
8
+
9
+ const NullFactory = require("./NullFactory");
10
+
11
+ /** @typedef {import("./Compiler")} Compiler */
12
+
13
+ class CompatibilityPlugin {
14
+ /**
15
+ * Apply the plugin
16
+ * @param {Compiler} compiler Webpack Compiler
17
+ * @returns {void}
18
+ */
19
+ apply(compiler) {
20
+ compiler.hooks.compilation.tap(
21
+ "CompatibilityPlugin",
22
+ (compilation, { normalModuleFactory }) => {
23
+ compilation.dependencyFactories.set(ConstDependency, new NullFactory());
24
+ compilation.dependencyTemplates.set(
25
+ ConstDependency,
26
+ new ConstDependency.Template()
27
+ );
28
+
29
+ normalModuleFactory.hooks.parser
30
+ .for("javascript/auto")
31
+ .tap("CompatibilityPlugin", (parser, parserOptions) => {
32
+ if (
33
+ typeof parserOptions.browserify !== "undefined" &&
34
+ !parserOptions.browserify
35
+ )
36
+ return;
37
+
38
+ parser.hooks.call
39
+ .for("require")
40
+ .tap("CompatibilityPlugin", expr => {
41
+ // support for browserify style require delegator: "require(o, !0)"
42
+ if (expr.arguments.length !== 2) return;
43
+ const second = parser.evaluateExpression(expr.arguments[1]);
44
+ if (!second.isBoolean()) return;
45
+ if (second.asBool() !== true) return;
46
+ const dep = new ConstDependency("require", expr.callee.range);
47
+ dep.loc = expr.loc;
48
+ if (parser.state.current.dependencies.length > 1) {
49
+ const last =
50
+ parser.state.current.dependencies[
51
+ parser.state.current.dependencies.length - 1
52
+ ];
53
+ if (
54
+ last.critical &&
55
+ last.options &&
56
+ last.options.request === "." &&
57
+ last.userRequest === "." &&
58
+ last.options.recursive
59
+ )
60
+ parser.state.current.dependencies.pop();
61
+ }
62
+ parser.state.current.addDependency(dep);
63
+ return true;
64
+ });
65
+ });
66
+ }
67
+ );
68
+ }
69
+ }
70
+ module.exports = CompatibilityPlugin;
@@ -26,7 +26,6 @@ const ChunkTemplate = require("./ChunkTemplate");
26
26
  const HotUpdateChunkTemplate = require("./HotUpdateChunkTemplate");
27
27
  const ModuleTemplate = require("./ModuleTemplate");
28
28
  const RuntimeTemplate = require("./RuntimeTemplate");
29
- const Dependency = require("./Dependency");
30
29
  const ChunkRenderError = require("./ChunkRenderError");
31
30
  const AsyncDependencyToInitialChunkError = require("./AsyncDependencyToInitialChunkError");
32
31
  const Stats = require("./Stats");
@@ -36,6 +35,7 @@ const Queue = require("./util/Queue");
36
35
  const SortableSet = require("./util/SortableSet");
37
36
  const GraphHelpers = require("./GraphHelpers");
38
37
  const ModuleDependency = require("./dependencies/ModuleDependency");
38
+ const compareLocations = require("./compareLocations");
39
39
 
40
40
  /** @typedef {import("./Module")} Module */
41
41
  /** @typedef {import("./Compiler")} Compiler */
@@ -642,7 +642,7 @@ class Compilation extends Tapable {
642
642
  war.dependencies = dependencies;
643
643
  this.warnings.push(war);
644
644
  }
645
- module.dependencies.sort(Dependency.compare);
645
+ module.dependencies.sort((a, b) => compareLocations(a.loc, b.loc));
646
646
  if (error) {
647
647
  this.hooks.failedModule.call(module, error);
648
648
  return callback(error);
@@ -888,6 +888,7 @@ class Compilation extends Tapable {
888
888
  // leaking the Compilation object.
889
889
 
890
890
  if (err) {
891
+ // eslint-disable-next-line no-self-assign
891
892
  err.stack = err.stack;
892
893
  return callback(err);
893
894
  }
@@ -1292,6 +1293,9 @@ class Compilation extends Tapable {
1292
1293
  * @returns {void}
1293
1294
  */
1294
1295
  sortModules(modules) {
1296
+ // TODO webpack 5: this should only be enabled when `moduleIds: "natural"`
1297
+ // TODO move it into a plugin (NaturalModuleIdsPlugin) and use this in WebpackOptionsApply
1298
+ // TODO remove this method
1295
1299
  modules.sort(byIndexOrIdentifier);
1296
1300
  }
1297
1301
 
@@ -1453,7 +1457,7 @@ class Compilation extends Tapable {
1453
1457
  * @returns {DependencyReference} a reference for the dependency
1454
1458
  */
1455
1459
  getDependencyReference(module, dependency) {
1456
- // TODO remove dep.getReference existance check in webpack 5
1460
+ // TODO remove dep.getReference existence check in webpack 5
1457
1461
  if (typeof dependency.getReference !== "function") return null;
1458
1462
  const ref = dependency.getReference();
1459
1463
  if (!ref) return null;
@@ -2113,7 +2117,7 @@ class Compilation extends Tapable {
2113
2117
 
2114
2118
  /**
2115
2119
  * Used to sort errors and warnings in compilation. this.warnings, and
2116
- * this.errors contribute to the compilation hash and therefore shoudl be
2120
+ * this.errors contribute to the compilation hash and therefore should be
2117
2121
  * updated whenever other references (having a chunk id) are sorted. This preserves the hash
2118
2122
  * integrity
2119
2123
  *
@@ -2438,21 +2442,48 @@ class Compilation extends Tapable {
2438
2442
  }
2439
2443
 
2440
2444
  // TODO remove in webpack 5
2441
- Compilation.prototype.applyPlugins = util.deprecate(function(name, ...args) {
2442
- this.hooks[
2443
- name.replace(/[- ]([a-z])/g, match => match[1].toUpperCase())
2444
- ].call(...args);
2445
- }, "Compilation.applyPlugins is deprecated. Use new API on `.hooks` instead");
2445
+ Compilation.prototype.applyPlugins = util.deprecate(
2446
+ /**
2447
+ * @deprecated
2448
+ * @param {string} name Name
2449
+ * @param {any[]} args Other arguments
2450
+ * @returns {void}
2451
+ * @this {Compilation}
2452
+ */
2453
+ function(name, ...args) {
2454
+ this.hooks[
2455
+ name.replace(/[- ]([a-z])/g, match => match[1].toUpperCase())
2456
+ ].call(...args);
2457
+ },
2458
+ "Compilation.applyPlugins is deprecated. Use new API on `.hooks` instead"
2459
+ );
2446
2460
 
2447
2461
  // TODO remove in webpack 5
2448
2462
  Object.defineProperty(Compilation.prototype, "moduleTemplate", {
2449
2463
  configurable: false,
2450
- get: util.deprecate(function() {
2451
- return this.moduleTemplates.javascript;
2452
- }, "Compilation.moduleTemplate: Use Compilation.moduleTemplates.javascript instead"),
2453
- set: util.deprecate(function(value) {
2454
- this.moduleTemplates.javascript = value;
2455
- }, "Compilation.moduleTemplate: Use Compilation.moduleTemplates.javascript instead.")
2464
+ get: util.deprecate(
2465
+ /**
2466
+ * @deprecated
2467
+ * @this {Compilation}
2468
+ * @returns {TODO} module template
2469
+ */
2470
+ function() {
2471
+ return this.moduleTemplates.javascript;
2472
+ },
2473
+ "Compilation.moduleTemplate: Use Compilation.moduleTemplates.javascript instead"
2474
+ ),
2475
+ set: util.deprecate(
2476
+ /**
2477
+ * @deprecated
2478
+ * @param {ModuleTemplate} value Template value
2479
+ * @this {Compilation}
2480
+ * @returns {void}
2481
+ */
2482
+ function(value) {
2483
+ this.moduleTemplates.javascript = value;
2484
+ },
2485
+ "Compilation.moduleTemplate: Use Compilation.moduleTemplates.javascript instead."
2486
+ )
2456
2487
  });
2457
2488
 
2458
2489
  module.exports = Compilation;
@@ -1,19 +1,19 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Maksim Nazarjev @acupofspirt
4
- */
5
- "use strict";
6
-
7
- const WebpackError = require("./WebpackError");
8
-
9
- module.exports = class ConcurrentCompilationError extends WebpackError {
10
- constructor() {
11
- super();
12
-
13
- this.name = "ConcurrentCompilationError";
14
- this.message =
15
- "You ran Webpack twice. Each instance only supports a single concurrent compilation at a time.";
16
-
17
- Error.captureStackTrace(this, this.constructor);
18
- }
19
- };
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Maksim Nazarjev @acupofspirt
4
+ */
5
+ "use strict";
6
+
7
+ const WebpackError = require("./WebpackError");
8
+
9
+ module.exports = class ConcurrentCompilationError extends WebpackError {
10
+ constructor() {
11
+ super();
12
+
13
+ this.name = "ConcurrentCompilationError";
14
+ this.message =
15
+ "You ran Webpack twice. Each instance only supports a single concurrent compilation at a time.";
16
+
17
+ Error.captureStackTrace(this, this.constructor);
18
+ }
19
+ };