webpack 4.15.0 → 4.16.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (271) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +761 -758
  3. package/SECURITY.md +9 -9
  4. package/buildin/amd-define.js +3 -3
  5. package/buildin/amd-options.js +2 -2
  6. package/buildin/global.js +20 -20
  7. package/buildin/harmony-module.js +24 -24
  8. package/buildin/module.js +22 -22
  9. package/buildin/system.js +7 -7
  10. package/hot/dev-server.js +61 -61
  11. package/hot/emitter.js +2 -2
  12. package/hot/log-apply-result.js +44 -44
  13. package/hot/log.js +45 -45
  14. package/hot/only-dev-server.js +105 -105
  15. package/hot/poll.js +40 -37
  16. package/hot/signal.js +62 -62
  17. package/lib/APIPlugin.js +84 -84
  18. package/lib/AmdMainTemplatePlugin.js +87 -87
  19. package/lib/AsyncDependencyToInitialChunkError.js +31 -31
  20. package/lib/AutomaticPrefetchPlugin.js +1 -1
  21. package/lib/BannerPlugin.js +117 -117
  22. package/lib/BasicEvaluatedExpression.js +211 -211
  23. package/lib/CachePlugin.js +102 -102
  24. package/lib/CaseSensitiveModulesWarning.js +67 -67
  25. package/lib/Chunk.js +833 -811
  26. package/lib/ChunkGroup.js +4 -4
  27. package/lib/ChunkRenderError.js +32 -32
  28. package/lib/CommentCompilationWarning.js +2 -2
  29. package/lib/CompatibilityPlugin.js +70 -70
  30. package/lib/Compilation.js +46 -15
  31. package/lib/ConcurrentCompilationError.js +19 -19
  32. package/lib/ConstPlugin.js +258 -258
  33. package/lib/ContextExclusionPlugin.js +28 -17
  34. package/lib/ContextModule.js +844 -739
  35. package/lib/ContextModuleFactory.js +262 -256
  36. package/lib/ContextReplacementPlugin.js +133 -133
  37. package/lib/DefinePlugin.js +49 -0
  38. package/lib/DelegatedModule.js +5 -0
  39. package/lib/DelegatedModuleFactoryPlugin.js +95 -89
  40. package/lib/DelegatedPlugin.js +39 -39
  41. package/lib/DependenciesBlock.js +1 -1
  42. package/lib/Dependency.js +10 -4
  43. package/lib/DllModule.js +60 -54
  44. package/lib/DllModuleFactory.js +29 -29
  45. package/lib/DllPlugin.js +44 -44
  46. package/lib/DllReferencePlugin.js +132 -84
  47. package/lib/EntryModuleNotFoundError.js +21 -21
  48. package/lib/Entrypoint.js +54 -54
  49. package/lib/EnvironmentPlugin.js +72 -65
  50. package/lib/ErrorHelpers.js +60 -60
  51. package/lib/EvalDevToolModulePlugin.js +27 -27
  52. package/lib/EvalSourceMapDevToolModuleTemplatePlugin.js +115 -115
  53. package/lib/EvalSourceMapDevToolPlugin.js +41 -41
  54. package/lib/ExportPropertyMainTemplatePlugin.js +53 -53
  55. package/lib/ExternalModule.js +165 -159
  56. package/lib/ExternalsPlugin.js +23 -23
  57. package/lib/FlagDependencyExportsPlugin.js +146 -146
  58. package/lib/FlagInitialModulesAsUsedPlugin.js +36 -36
  59. package/lib/FunctionModuleTemplatePlugin.js +100 -100
  60. package/lib/Generator.js +60 -52
  61. package/lib/HarmonyLinkingError.js +17 -17
  62. package/lib/HashedModuleIdsPlugin.js +53 -53
  63. package/lib/HotModuleReplacementPlugin.js +411 -413
  64. package/lib/IgnorePlugin.js +90 -90
  65. package/lib/JavascriptGenerator.js +229 -229
  66. package/lib/JavascriptModulesPlugin.js +179 -179
  67. package/lib/JsonGenerator.js +55 -55
  68. package/lib/JsonModulesPlugin.js +30 -30
  69. package/lib/JsonParser.js +27 -27
  70. package/lib/LibManifestPlugin.js +86 -86
  71. package/lib/LibraryTemplatePlugin.js +153 -153
  72. package/lib/LoaderOptionsPlugin.js +53 -53
  73. package/lib/LoaderTargetPlugin.js +24 -24
  74. package/lib/MemoryOutputFileSystem.js +5 -5
  75. package/lib/Module.js +431 -391
  76. package/lib/ModuleBuildError.js +52 -52
  77. package/lib/ModuleDependencyError.js +35 -35
  78. package/lib/ModuleDependencyWarning.js +25 -25
  79. package/lib/ModuleError.js +36 -36
  80. package/lib/ModuleFilenameHelpers.js +178 -178
  81. package/lib/ModuleNotFoundError.js +23 -23
  82. package/lib/ModuleParseError.js +57 -57
  83. package/lib/ModuleTemplate.js +93 -93
  84. package/lib/ModuleWarning.js +36 -36
  85. package/lib/MultiCompiler.js +283 -283
  86. package/lib/MultiModule.js +87 -81
  87. package/lib/MultiModuleFactory.js +23 -23
  88. package/lib/MultiStats.js +92 -92
  89. package/lib/MultiWatching.js +38 -38
  90. package/lib/NamedChunksPlugin.js +29 -29
  91. package/lib/NamedModulesPlugin.js +57 -57
  92. package/lib/NoEmitOnErrorsPlugin.js +20 -20
  93. package/lib/NoModeWarning.js +23 -23
  94. package/lib/NodeStuffPlugin.js +197 -179
  95. package/lib/NormalModule.js +542 -536
  96. package/lib/NormalModuleFactory.js +526 -526
  97. package/lib/NormalModuleReplacementPlugin.js +51 -51
  98. package/lib/NullFactory.js +12 -12
  99. package/lib/OptionsApply.js +10 -10
  100. package/lib/OptionsDefaulter.js +84 -84
  101. package/lib/Parser.js +2202 -2193
  102. package/lib/ParserHelpers.js +103 -103
  103. package/lib/PrefetchPlugin.js +37 -37
  104. package/lib/ProgressPlugin.js +246 -246
  105. package/lib/ProvidePlugin.js +86 -86
  106. package/lib/RawModule.js +56 -56
  107. package/lib/RecordIdsPlugin.js +230 -230
  108. package/lib/RemovedPluginError.js +11 -11
  109. package/lib/RequestShortener.js +83 -83
  110. package/lib/RequireJsStuffPlugin.js +69 -69
  111. package/lib/ResolverFactory.js +64 -64
  112. package/lib/RuntimeTemplate.js +12 -0
  113. package/lib/SetVarMainTemplatePlugin.js +69 -69
  114. package/lib/SingleEntryPlugin.js +6 -1
  115. package/lib/SizeFormatHelpers.js +24 -24
  116. package/lib/SourceMapDevToolModuleOptionsPlugin.js +49 -49
  117. package/lib/SourceMapDevToolPlugin.js +301 -301
  118. package/lib/Stats.js +28 -5
  119. package/lib/TemplatedPathPlugin.js +173 -173
  120. package/lib/UnsupportedFeatureWarning.js +22 -22
  121. package/lib/UseStrictPlugin.js +54 -54
  122. package/lib/WarnCaseSensitiveModulesPlugin.js +37 -37
  123. package/lib/WarnNoModeSetPlugin.js +17 -17
  124. package/lib/WatchIgnorePlugin.js +100 -100
  125. package/lib/Watching.js +194 -194
  126. package/lib/WebpackOptionsApply.js +92 -10
  127. package/lib/WebpackOptionsDefaulter.js +368 -354
  128. package/lib/debug/ProfilingPlugin.js +430 -430
  129. package/lib/dependencies/AMDPlugin.js +250 -250
  130. package/lib/dependencies/AMDRequireArrayDependency.js +49 -49
  131. package/lib/dependencies/AMDRequireContextDependency.js +20 -20
  132. package/lib/dependencies/AMDRequireDependency.js +135 -135
  133. package/lib/dependencies/AMDRequireItemDependency.js +22 -22
  134. package/lib/dependencies/CommonJsPlugin.js +161 -161
  135. package/lib/dependencies/CommonJsRequireContextDependency.js +23 -23
  136. package/lib/dependencies/CommonJsRequireDependency.js +22 -22
  137. package/lib/dependencies/CommonJsRequireDependencyParserPlugin.js +6 -0
  138. package/lib/dependencies/ConstDependency.js +33 -33
  139. package/lib/dependencies/ContextDependency.js +68 -68
  140. package/lib/dependencies/ContextDependencyHelpers.js +142 -142
  141. package/lib/dependencies/ContextDependencyTemplateAsId.js +42 -42
  142. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +38 -38
  143. package/lib/dependencies/ContextElementDependency.js +21 -21
  144. package/lib/dependencies/CriticalDependencyWarning.js +20 -20
  145. package/lib/dependencies/DelegatedSourceDependency.js +18 -18
  146. package/lib/dependencies/DllEntryDependency.js +20 -20
  147. package/lib/dependencies/HarmonyAcceptDependency.js +45 -45
  148. package/lib/dependencies/HarmonyCompatibilityDependency.js +31 -31
  149. package/lib/dependencies/HarmonyDetectionParserPlugin.js +92 -92
  150. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +139 -139
  151. package/lib/dependencies/HarmonyExportHeaderDependency.js +30 -30
  152. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +2 -1
  153. package/lib/dependencies/HarmonyImportDependency.js +109 -109
  154. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +222 -222
  155. package/lib/dependencies/HarmonyImportSideEffectDependency.js +31 -31
  156. package/lib/dependencies/HarmonyImportSpecifierDependency.js +167 -167
  157. package/lib/dependencies/HarmonyInitDependency.js +60 -60
  158. package/lib/dependencies/HarmonyModulesPlugin.js +146 -146
  159. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +26 -26
  160. package/lib/dependencies/ImportContextDependency.js +23 -23
  161. package/lib/dependencies/ImportDependenciesBlock.js +18 -18
  162. package/lib/dependencies/ImportDependency.js +34 -34
  163. package/lib/dependencies/ImportEagerDependency.js +32 -32
  164. package/lib/dependencies/ImportParserPlugin.js +263 -263
  165. package/lib/dependencies/ImportPlugin.js +82 -82
  166. package/lib/dependencies/ImportWeakDependency.js +34 -34
  167. package/lib/dependencies/LoaderPlugin.js +18 -1
  168. package/lib/dependencies/LocalModule.js +23 -23
  169. package/lib/dependencies/LocalModulesHelpers.js +52 -52
  170. package/lib/dependencies/ModuleDependencyTemplateAsId.js +17 -17
  171. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +17 -17
  172. package/lib/dependencies/ModuleHotAcceptDependency.js +23 -23
  173. package/lib/dependencies/ModuleHotDeclineDependency.js +23 -23
  174. package/lib/dependencies/NullDependency.js +20 -20
  175. package/lib/dependencies/PrefetchDependency.js +18 -18
  176. package/lib/dependencies/RequireContextDependency.js +22 -22
  177. package/lib/dependencies/RequireContextDependencyParserPlugin.js +56 -56
  178. package/lib/dependencies/RequireContextPlugin.js +143 -143
  179. package/lib/dependencies/RequireEnsureDependenciesBlock.js +33 -33
  180. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +116 -116
  181. package/lib/dependencies/RequireEnsureDependency.js +58 -58
  182. package/lib/dependencies/RequireEnsureItemDependency.js +21 -21
  183. package/lib/dependencies/RequireEnsurePlugin.js +74 -74
  184. package/lib/dependencies/RequireHeaderDependency.js +26 -26
  185. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +23 -23
  186. package/lib/dependencies/RequireIncludePlugin.js +61 -61
  187. package/lib/dependencies/RequireResolveContextDependency.js +23 -23
  188. package/lib/dependencies/RequireResolveDependency.js +22 -22
  189. package/lib/dependencies/RequireResolveDependencyParserPlugin.js +85 -85
  190. package/lib/dependencies/RequireResolveHeaderDependency.js +26 -26
  191. package/lib/dependencies/SystemPlugin.js +125 -125
  192. package/lib/dependencies/UnsupportedDependency.js +27 -27
  193. package/lib/dependencies/WebAssemblyExportImportedDependency.js +29 -29
  194. package/lib/dependencies/WebAssemblyImportDependency.js +48 -48
  195. package/lib/dependencies/WebpackMissingModule.js +20 -20
  196. package/lib/formatLocation.js +75 -61
  197. package/lib/node/NodeChunkTemplatePlugin.js +31 -31
  198. package/lib/node/NodeEnvironmentPlugin.js +28 -28
  199. package/lib/node/NodeHotUpdateChunkTemplatePlugin.js +36 -36
  200. package/lib/node/NodeMainTemplate.runtime.js +27 -27
  201. package/lib/node/NodeMainTemplatePlugin.js +323 -323
  202. package/lib/node/NodeOutputFileSystem.js +22 -22
  203. package/lib/node/NodeSourcePlugin.js +144 -144
  204. package/lib/node/NodeTargetPlugin.js +18 -18
  205. package/lib/node/NodeTemplatePlugin.js +31 -31
  206. package/lib/node/NodeWatchFileSystem.js +99 -99
  207. package/lib/node/ReadFileCompileWasmTemplatePlugin.js +61 -61
  208. package/lib/optimize/AggressiveMergingPlugin.js +87 -87
  209. package/lib/optimize/AggressiveSplittingPlugin.js +287 -287
  210. package/lib/optimize/ConcatenatedModule.js +5 -0
  211. package/lib/optimize/EnsureChunkConditionsPlugin.js +70 -70
  212. package/lib/optimize/FlagIncludedChunksPlugin.js +99 -99
  213. package/lib/optimize/LimitChunkCountPlugin.js +66 -66
  214. package/lib/optimize/MergeDuplicateChunksPlugin.js +78 -78
  215. package/lib/optimize/MinChunkSizePlugin.js +77 -77
  216. package/lib/optimize/NaturalChunkOrderPlugin.js +41 -0
  217. package/lib/optimize/OccurrenceChunkOrderPlugin.js +61 -0
  218. package/lib/optimize/OccurrenceModuleOrderPlugin.js +103 -0
  219. package/lib/optimize/OccurrenceOrderPlugin.js +135 -133
  220. package/lib/optimize/RemoveEmptyChunksPlugin.js +42 -42
  221. package/lib/optimize/RemoveParentModulesPlugin.js +127 -127
  222. package/lib/optimize/RuntimeChunkPlugin.js +41 -41
  223. package/lib/optimize/SideEffectsFlagPlugin.js +168 -168
  224. package/lib/optimize/SplitChunksPlugin.js +866 -850
  225. package/lib/performance/AssetsOverSizeLimitWarning.js +30 -30
  226. package/lib/performance/EntrypointsOverSizeLimitWarning.js +30 -30
  227. package/lib/performance/NoAsyncChunksWarning.js +21 -21
  228. package/lib/performance/SizeLimitsPlugin.js +105 -105
  229. package/lib/util/SortableSet.js +1 -0
  230. package/lib/util/StackedSetMap.js +144 -135
  231. package/lib/util/TrackingSet.js +35 -35
  232. package/lib/util/cachedMerge.js +35 -35
  233. package/lib/util/deterministicGrouping.js +251 -251
  234. package/lib/util/identifier.js +103 -103
  235. package/lib/util/objectToMap.js +16 -16
  236. package/lib/validateSchema.js +67 -67
  237. package/lib/wasm/UnsupportedWebAssemblyFeatureError.js +17 -17
  238. package/lib/wasm/WasmFinalizeExportsPlugin.js +1 -1
  239. package/lib/wasm/WebAssemblyGenerator.js +16 -2
  240. package/lib/wasm/WebAssemblyJavascriptGenerator.js +147 -133
  241. package/lib/wasm/WebAssemblyParser.js +174 -174
  242. package/lib/wasm/WebAssemblyUtils.js +59 -59
  243. package/lib/web/FetchCompileWasmTemplatePlugin.js +37 -37
  244. package/lib/web/JsonpExportMainTemplatePlugin.js +47 -47
  245. package/lib/web/JsonpHotUpdateChunkTemplatePlugin.js +39 -39
  246. package/lib/web/JsonpMainTemplate.runtime.js +65 -65
  247. package/lib/web/JsonpMainTemplatePlugin.js +1 -1
  248. package/lib/web/JsonpTemplatePlugin.js +23 -23
  249. package/lib/web/WebEnvironmentPlugin.js +18 -18
  250. package/lib/webpack.js +5 -0
  251. package/lib/webworker/WebWorkerChunkTemplatePlugin.js +35 -35
  252. package/lib/webworker/WebWorkerHotUpdateChunkTemplatePlugin.js +40 -40
  253. package/lib/webworker/WebWorkerMainTemplate.runtime.js +65 -65
  254. package/lib/webworker/WebWorkerMainTemplatePlugin.js +196 -196
  255. package/lib/webworker/WebWorkerTemplatePlugin.js +25 -25
  256. package/package.json +22 -13
  257. package/schemas/WebpackOptions.json +2062 -2036
  258. package/schemas/ajv.absolutePath.js +55 -55
  259. package/schemas/plugins/BannerPlugin.json +96 -96
  260. package/schemas/plugins/DllPlugin.json +32 -32
  261. package/schemas/plugins/DllReferencePlugin.json +99 -99
  262. package/schemas/plugins/HashedModuleIdsPlugin.json +24 -24
  263. package/schemas/plugins/LoaderOptionsPlugin.json +26 -26
  264. package/schemas/plugins/SourceMapDevToolPlugin.json +187 -187
  265. package/schemas/plugins/WatchIgnorePlugin.json +16 -16
  266. package/schemas/plugins/debug/ProfilingPlugin.json +12 -12
  267. package/schemas/plugins/optimize/AggressiveSplittingPlugin.json +22 -22
  268. package/schemas/plugins/optimize/LimitChunkCountPlugin.json +15 -15
  269. package/schemas/plugins/optimize/MinChunkSizePlugin.json +13 -13
  270. package/schemas/plugins/optimize/OccurrenceOrderChunkIdsPlugin.json +10 -0
  271. package/schemas/plugins/optimize/OccurrenceOrderModuleIdsPlugin.json +10 -0
@@ -1,354 +1,368 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
-
7
- const path = require("path");
8
-
9
- const OptionsDefaulter = require("./OptionsDefaulter");
10
- const Template = require("./Template");
11
-
12
- const isProductionLikeMode = options => {
13
- return options.mode === "production" || !options.mode;
14
- };
15
-
16
- const isWebLikeTarget = options => {
17
- return options.target === "web" || options.target === "webworker";
18
- };
19
-
20
- class WebpackOptionsDefaulter extends OptionsDefaulter {
21
- constructor() {
22
- super();
23
-
24
- this.set("entry", "./src");
25
-
26
- this.set(
27
- "devtool",
28
- "make",
29
- options => (options.mode === "development" ? "eval" : false)
30
- );
31
- this.set("cache", "make", options => options.mode === "development");
32
-
33
- this.set("context", process.cwd());
34
- this.set("target", "web");
35
-
36
- this.set("module", "call", value => Object.assign({}, value));
37
- this.set("module.unknownContextRequest", ".");
38
- this.set("module.unknownContextRegExp", false);
39
- this.set("module.unknownContextRecursive", true);
40
- this.set("module.unknownContextCritical", true);
41
- this.set("module.exprContextRequest", ".");
42
- this.set("module.exprContextRegExp", false);
43
- this.set("module.exprContextRecursive", true);
44
- this.set("module.exprContextCritical", true);
45
- this.set("module.wrappedContextRegExp", /.*/);
46
- this.set("module.wrappedContextRecursive", true);
47
- this.set("module.wrappedContextCritical", false);
48
- this.set("module.strictExportPresence", false);
49
- this.set("module.strictThisContextOnImports", false);
50
- this.set("module.unsafeCache", "make", options => !!options.cache);
51
- this.set("module.rules", []);
52
- this.set("module.defaultRules", "make", options => [
53
- {
54
- type: "javascript/auto",
55
- resolve: {}
56
- },
57
- {
58
- test: /\.mjs$/i,
59
- type: "javascript/esm",
60
- resolve: {
61
- mainFields:
62
- options.target === "web" ||
63
- options.target === "webworker" ||
64
- options.target === "electron-renderer"
65
- ? ["browser", "main"]
66
- : ["main"]
67
- }
68
- },
69
- {
70
- test: /\.json$/i,
71
- type: "json"
72
- },
73
- {
74
- test: /\.wasm$/i,
75
- type: "webassembly/experimental"
76
- }
77
- ]);
78
-
79
- this.set("output", "call", (value, options) => {
80
- if (typeof value === "string") {
81
- return {
82
- filename: value
83
- };
84
- } else if (typeof value !== "object") {
85
- return {};
86
- } else {
87
- return Object.assign({}, value);
88
- }
89
- });
90
-
91
- this.set("output.filename", "[name].js");
92
- this.set("output.chunkFilename", "make", options => {
93
- const filename = options.output.filename;
94
- if (typeof filename !== "function") {
95
- const hasName = filename.includes("[name]");
96
- const hasId = filename.includes("[id]");
97
- const hasChunkHash = filename.includes("[chunkhash]");
98
- // Anything changing depending on chunk is fine
99
- if (hasChunkHash || hasName || hasId) return filename;
100
- // Elsewise prefix "[id]." in front of the basename to make it changing
101
- return filename.replace(/(^|\/)([^/]*(?:\?|$))/, "$1[id].$2");
102
- }
103
- return "[id].js";
104
- });
105
- this.set("output.webassemblyModuleFilename", "[modulehash].module.wasm");
106
- this.set("output.library", "");
107
- this.set("output.hotUpdateFunction", "make", options => {
108
- return Template.toIdentifier(
109
- "webpackHotUpdate" + Template.toIdentifier(options.output.library)
110
- );
111
- });
112
- this.set("output.jsonpFunction", "make", options => {
113
- return Template.toIdentifier(
114
- "webpackJsonp" + Template.toIdentifier(options.output.library)
115
- );
116
- });
117
- this.set("output.chunkCallbackName", "make", options => {
118
- return Template.toIdentifier(
119
- "webpackChunk" + Template.toIdentifier(options.output.library)
120
- );
121
- });
122
- this.set("output.globalObject", "make", options => {
123
- switch (options.target) {
124
- case "web":
125
- case "electron-renderer":
126
- case "node-webkit":
127
- return "window";
128
- case "webworker":
129
- return "self";
130
- case "node":
131
- case "async-node":
132
- case "electron-main":
133
- return "global";
134
- default:
135
- return "self";
136
- }
137
- });
138
- this.set("output.devtoolNamespace", "make", options => {
139
- if (Array.isArray(options.output.library)) {
140
- return options.output.library.join(".");
141
- } else if (typeof options.output.library === "object") {
142
- return options.output.library.root || "";
143
- }
144
- return options.output.library || "";
145
- });
146
- this.set("output.libraryTarget", "var");
147
- this.set("output.path", path.join(process.cwd(), "dist"));
148
- this.set(
149
- "output.pathinfo",
150
- "make",
151
- options => options.mode === "development"
152
- );
153
- this.set("output.sourceMapFilename", "[file].map[query]");
154
- this.set("output.hotUpdateChunkFilename", "[id].[hash].hot-update.js");
155
- this.set("output.hotUpdateMainFilename", "[hash].hot-update.json");
156
- this.set("output.crossOriginLoading", false);
157
- this.set("output.jsonpScriptType", false);
158
- this.set("output.chunkLoadTimeout", 120000);
159
- this.set("output.hashFunction", "md4");
160
- this.set("output.hashDigest", "hex");
161
- this.set("output.hashDigestLength", 20);
162
- this.set("output.devtoolLineToLine", false);
163
- this.set("output.strictModuleExceptionHandling", false);
164
-
165
- this.set("node", "call", value => {
166
- if (typeof value === "boolean") {
167
- return value;
168
- } else {
169
- return Object.assign({}, value);
170
- }
171
- });
172
- this.set("node.console", false);
173
- this.set("node.process", true);
174
- this.set("node.global", true);
175
- this.set("node.Buffer", true);
176
- this.set("node.setImmediate", true);
177
- this.set("node.__filename", "mock");
178
- this.set("node.__dirname", "mock");
179
-
180
- this.set("performance", "call", (value, options) => {
181
- if (value === false) return false;
182
- if (
183
- value === undefined &&
184
- (!isProductionLikeMode(options) || !isWebLikeTarget(options))
185
- )
186
- return false;
187
- return Object.assign({}, value);
188
- });
189
- this.set("performance.maxAssetSize", 250000);
190
- this.set("performance.maxEntrypointSize", 250000);
191
- this.set(
192
- "performance.hints",
193
- "make",
194
- options => (isProductionLikeMode(options) ? "warning" : false)
195
- );
196
-
197
- this.set("optimization", "call", value => Object.assign({}, value));
198
- this.set("optimization.removeAvailableModules", true);
199
- this.set("optimization.removeEmptyChunks", true);
200
- this.set("optimization.mergeDuplicateChunks", true);
201
- this.set("optimization.flagIncludedChunks", "make", options =>
202
- isProductionLikeMode(options)
203
- );
204
- this.set("optimization.occurrenceOrder", "make", options =>
205
- isProductionLikeMode(options)
206
- );
207
- this.set("optimization.sideEffects", "make", options =>
208
- isProductionLikeMode(options)
209
- );
210
- this.set("optimization.providedExports", true);
211
- this.set("optimization.usedExports", "make", options =>
212
- isProductionLikeMode(options)
213
- );
214
- this.set("optimization.concatenateModules", "make", options =>
215
- isProductionLikeMode(options)
216
- );
217
- this.set("optimization.splitChunks", {});
218
- this.set("optimization.splitChunks.hidePathInfo", "make", options => {
219
- return isProductionLikeMode(options);
220
- });
221
- this.set("optimization.splitChunks.chunks", "async");
222
- this.set("optimization.splitChunks.minSize", "make", options => {
223
- return isProductionLikeMode(options) ? 30000 : 10000;
224
- });
225
- this.set("optimization.splitChunks.minChunks", 1);
226
- this.set("optimization.splitChunks.maxAsyncRequests", "make", options => {
227
- return isProductionLikeMode(options) ? 5 : Infinity;
228
- });
229
- this.set("optimization.splitChunks.automaticNameDelimiter", "~");
230
- this.set("optimization.splitChunks.maxInitialRequests", "make", options => {
231
- return isProductionLikeMode(options) ? 3 : Infinity;
232
- });
233
- this.set("optimization.splitChunks.name", true);
234
- this.set("optimization.splitChunks.cacheGroups", {});
235
- this.set("optimization.splitChunks.cacheGroups.default", {
236
- reuseExistingChunk: true,
237
- minChunks: 2,
238
- priority: -20
239
- });
240
- this.set("optimization.splitChunks.cacheGroups.vendors", {
241
- test: /[\\/]node_modules[\\/]/,
242
- priority: -10
243
- });
244
- this.set("optimization.runtimeChunk", "call", value => {
245
- if (value === "single") {
246
- return {
247
- name: "runtime"
248
- };
249
- }
250
- if (value === true || value === "multiple") {
251
- return {
252
- name: entrypoint => `runtime~${entrypoint.name}`
253
- };
254
- }
255
- return value;
256
- });
257
- this.set("optimization.noEmitOnErrors", "make", options =>
258
- isProductionLikeMode(options)
259
- );
260
- this.set("optimization.checkWasmTypes", "make", options =>
261
- isProductionLikeMode(options)
262
- );
263
- this.set("optimization.mangleWasmImports", false);
264
- this.set(
265
- "optimization.namedModules",
266
- "make",
267
- options => options.mode === "development"
268
- );
269
- this.set("optimization.hashedModuleIds", false);
270
- this.set(
271
- "optimization.namedChunks",
272
- "make",
273
- options => options.mode === "development"
274
- );
275
- this.set(
276
- "optimization.portableRecords",
277
- "make",
278
- options =>
279
- !!(
280
- options.recordsInputPath ||
281
- options.recordsOutputPath ||
282
- options.recordsPath
283
- )
284
- );
285
- this.set("optimization.minimize", "make", options =>
286
- isProductionLikeMode(options)
287
- );
288
- this.set("optimization.minimizer", "make", options => [
289
- {
290
- apply: compiler => {
291
- // Lazy load the uglifyjs plugin
292
- const UglifyJsPlugin = require("uglifyjs-webpack-plugin");
293
- const SourceMapDevToolPlugin = require("./SourceMapDevToolPlugin");
294
- new UglifyJsPlugin({
295
- cache: true,
296
- parallel: true,
297
- sourceMap:
298
- (options.devtool && /source-?map/.test(options.devtool)) ||
299
- (options.plugins &&
300
- options.plugins.some(p => p instanceof SourceMapDevToolPlugin))
301
- }).apply(compiler);
302
- }
303
- }
304
- ]);
305
- this.set("optimization.nodeEnv", "make", options => {
306
- // TODO: In webpack 5, it should return `false` when mode is `none`
307
- return options.mode || "production";
308
- });
309
-
310
- this.set("resolve", "call", value => Object.assign({}, value));
311
- this.set("resolve.unsafeCache", true);
312
- this.set("resolve.modules", ["node_modules"]);
313
- this.set("resolve.extensions", [".wasm", ".mjs", ".js", ".json"]);
314
- this.set("resolve.mainFiles", ["index"]);
315
- this.set("resolve.aliasFields", "make", options => {
316
- if (options.target === "web" || options.target === "webworker") {
317
- return ["browser"];
318
- } else {
319
- return [];
320
- }
321
- });
322
- this.set("resolve.mainFields", "make", options => {
323
- if (
324
- options.target === "web" ||
325
- options.target === "webworker" ||
326
- options.target === "electron-renderer"
327
- ) {
328
- return ["browser", "module", "main"];
329
- } else {
330
- return ["module", "main"];
331
- }
332
- });
333
- this.set("resolve.cacheWithContext", "make", options => {
334
- return (
335
- Array.isArray(options.resolve.plugins) &&
336
- options.resolve.plugins.length > 0
337
- );
338
- });
339
-
340
- this.set("resolveLoader", "call", value => Object.assign({}, value));
341
- this.set("resolveLoader.unsafeCache", true);
342
- this.set("resolveLoader.mainFields", ["loader", "main"]);
343
- this.set("resolveLoader.extensions", [".js", ".json"]);
344
- this.set("resolveLoader.mainFiles", ["index"]);
345
- this.set("resolveLoader.cacheWithContext", "make", options => {
346
- return (
347
- Array.isArray(options.resolveLoader.plugins) &&
348
- options.resolveLoader.plugins.length > 0
349
- );
350
- });
351
- }
352
- }
353
-
354
- module.exports = WebpackOptionsDefaulter;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ const path = require("path");
8
+
9
+ const OptionsDefaulter = require("./OptionsDefaulter");
10
+ const Template = require("./Template");
11
+
12
+ const isProductionLikeMode = options => {
13
+ return options.mode === "production" || !options.mode;
14
+ };
15
+
16
+ const isWebLikeTarget = options => {
17
+ return options.target === "web" || options.target === "webworker";
18
+ };
19
+
20
+ const getDevtoolNamespace = library => {
21
+ // if options.output.library is a string
22
+ if (Array.isArray(library)) {
23
+ return library.join(".");
24
+ } else if (typeof library === "object") {
25
+ return getDevtoolNamespace(library.root);
26
+ }
27
+ return library || "";
28
+ };
29
+
30
+ class WebpackOptionsDefaulter extends OptionsDefaulter {
31
+ constructor() {
32
+ super();
33
+
34
+ this.set("entry", "./src");
35
+
36
+ this.set(
37
+ "devtool",
38
+ "make",
39
+ options => (options.mode === "development" ? "eval" : false)
40
+ );
41
+ this.set("cache", "make", options => options.mode === "development");
42
+
43
+ this.set("context", process.cwd());
44
+ this.set("target", "web");
45
+
46
+ this.set("module", "call", value => Object.assign({}, value));
47
+ this.set("module.unknownContextRequest", ".");
48
+ this.set("module.unknownContextRegExp", false);
49
+ this.set("module.unknownContextRecursive", true);
50
+ this.set("module.unknownContextCritical", true);
51
+ this.set("module.exprContextRequest", ".");
52
+ this.set("module.exprContextRegExp", false);
53
+ this.set("module.exprContextRecursive", true);
54
+ this.set("module.exprContextCritical", true);
55
+ this.set("module.wrappedContextRegExp", /.*/);
56
+ this.set("module.wrappedContextRecursive", true);
57
+ this.set("module.wrappedContextCritical", false);
58
+ this.set("module.strictExportPresence", false);
59
+ this.set("module.strictThisContextOnImports", false);
60
+ this.set("module.unsafeCache", "make", options => !!options.cache);
61
+ this.set("module.rules", []);
62
+ this.set("module.defaultRules", "make", options => [
63
+ {
64
+ type: "javascript/auto",
65
+ resolve: {}
66
+ },
67
+ {
68
+ test: /\.mjs$/i,
69
+ type: "javascript/esm",
70
+ resolve: {
71
+ mainFields:
72
+ options.target === "web" ||
73
+ options.target === "webworker" ||
74
+ options.target === "electron-renderer"
75
+ ? ["browser", "main"]
76
+ : ["main"]
77
+ }
78
+ },
79
+ {
80
+ test: /\.json$/i,
81
+ type: "json"
82
+ },
83
+ {
84
+ test: /\.wasm$/i,
85
+ type: "webassembly/experimental"
86
+ }
87
+ ]);
88
+
89
+ this.set("output", "call", (value, options) => {
90
+ if (typeof value === "string") {
91
+ return {
92
+ filename: value
93
+ };
94
+ } else if (typeof value !== "object") {
95
+ return {};
96
+ } else {
97
+ return Object.assign({}, value);
98
+ }
99
+ });
100
+
101
+ this.set("output.filename", "[name].js");
102
+ this.set("output.chunkFilename", "make", options => {
103
+ const filename = options.output.filename;
104
+ if (typeof filename !== "function") {
105
+ const hasName = filename.includes("[name]");
106
+ const hasId = filename.includes("[id]");
107
+ const hasChunkHash = filename.includes("[chunkhash]");
108
+ // Anything changing depending on chunk is fine
109
+ if (hasChunkHash || hasName || hasId) return filename;
110
+ // Elsewise prefix "[id]." in front of the basename to make it changing
111
+ return filename.replace(/(^|\/)([^/]*(?:\?|$))/, "$1[id].$2");
112
+ }
113
+ return "[id].js";
114
+ });
115
+ this.set("output.webassemblyModuleFilename", "[modulehash].module.wasm");
116
+ this.set("output.library", "");
117
+ this.set("output.hotUpdateFunction", "make", options => {
118
+ return Template.toIdentifier(
119
+ "webpackHotUpdate" + Template.toIdentifier(options.output.library)
120
+ );
121
+ });
122
+ this.set("output.jsonpFunction", "make", options => {
123
+ return Template.toIdentifier(
124
+ "webpackJsonp" + Template.toIdentifier(options.output.library)
125
+ );
126
+ });
127
+ this.set("output.chunkCallbackName", "make", options => {
128
+ return Template.toIdentifier(
129
+ "webpackChunk" + Template.toIdentifier(options.output.library)
130
+ );
131
+ });
132
+ this.set("output.globalObject", "make", options => {
133
+ switch (options.target) {
134
+ case "web":
135
+ case "electron-renderer":
136
+ case "node-webkit":
137
+ return "window";
138
+ case "webworker":
139
+ return "self";
140
+ case "node":
141
+ case "async-node":
142
+ case "electron-main":
143
+ return "global";
144
+ default:
145
+ return "self";
146
+ }
147
+ });
148
+ this.set("output.devtoolNamespace", "make", options => {
149
+ return getDevtoolNamespace(options.output.library);
150
+ });
151
+ this.set("output.libraryTarget", "var");
152
+ this.set("output.path", path.join(process.cwd(), "dist"));
153
+ this.set(
154
+ "output.pathinfo",
155
+ "make",
156
+ options => options.mode === "development"
157
+ );
158
+ this.set("output.sourceMapFilename", "[file].map[query]");
159
+ this.set("output.hotUpdateChunkFilename", "[id].[hash].hot-update.js");
160
+ this.set("output.hotUpdateMainFilename", "[hash].hot-update.json");
161
+ this.set("output.crossOriginLoading", false);
162
+ this.set("output.jsonpScriptType", false);
163
+ this.set("output.chunkLoadTimeout", 120000);
164
+ this.set("output.hashFunction", "md4");
165
+ this.set("output.hashDigest", "hex");
166
+ this.set("output.hashDigestLength", 20);
167
+ this.set("output.devtoolLineToLine", false);
168
+ this.set("output.strictModuleExceptionHandling", false);
169
+
170
+ this.set("node", "call", value => {
171
+ if (typeof value === "boolean") {
172
+ return value;
173
+ } else {
174
+ return Object.assign({}, value);
175
+ }
176
+ });
177
+ this.set("node.console", false);
178
+ this.set("node.process", true);
179
+ this.set("node.global", true);
180
+ this.set("node.Buffer", true);
181
+ this.set("node.setImmediate", true);
182
+ this.set("node.__filename", "mock");
183
+ this.set("node.__dirname", "mock");
184
+
185
+ this.set("performance", "call", (value, options) => {
186
+ if (value === false) return false;
187
+ if (
188
+ value === undefined &&
189
+ (!isProductionLikeMode(options) || !isWebLikeTarget(options))
190
+ )
191
+ return false;
192
+ return Object.assign({}, value);
193
+ });
194
+ this.set("performance.maxAssetSize", 250000);
195
+ this.set("performance.maxEntrypointSize", 250000);
196
+ this.set(
197
+ "performance.hints",
198
+ "make",
199
+ options => (isProductionLikeMode(options) ? "warning" : false)
200
+ );
201
+
202
+ this.set("optimization", "call", value => Object.assign({}, value));
203
+ this.set("optimization.removeAvailableModules", true);
204
+ this.set("optimization.removeEmptyChunks", true);
205
+ this.set("optimization.mergeDuplicateChunks", true);
206
+ this.set("optimization.flagIncludedChunks", "make", options =>
207
+ isProductionLikeMode(options)
208
+ );
209
+ // TODO webpack 5 add `moduleIds: "named"` default for development
210
+ // TODO webpack 5 add `moduleIds: "size"` default for production
211
+ // TODO webpack 5 remove optimization.occurrenceOrder
212
+ this.set("optimization.occurrenceOrder", "make", options =>
213
+ isProductionLikeMode(options)
214
+ );
215
+ this.set("optimization.sideEffects", "make", options =>
216
+ isProductionLikeMode(options)
217
+ );
218
+ this.set("optimization.providedExports", true);
219
+ this.set("optimization.usedExports", "make", options =>
220
+ isProductionLikeMode(options)
221
+ );
222
+ this.set("optimization.concatenateModules", "make", options =>
223
+ isProductionLikeMode(options)
224
+ );
225
+ this.set("optimization.splitChunks", {});
226
+ this.set("optimization.splitChunks.hidePathInfo", "make", options => {
227
+ return isProductionLikeMode(options);
228
+ });
229
+ this.set("optimization.splitChunks.chunks", "async");
230
+ this.set("optimization.splitChunks.minSize", "make", options => {
231
+ return isProductionLikeMode(options) ? 30000 : 10000;
232
+ });
233
+ this.set("optimization.splitChunks.minChunks", 1);
234
+ this.set("optimization.splitChunks.maxAsyncRequests", "make", options => {
235
+ return isProductionLikeMode(options) ? 5 : Infinity;
236
+ });
237
+ this.set("optimization.splitChunks.automaticNameDelimiter", "~");
238
+ this.set("optimization.splitChunks.maxInitialRequests", "make", options => {
239
+ return isProductionLikeMode(options) ? 3 : Infinity;
240
+ });
241
+ this.set("optimization.splitChunks.name", true);
242
+ this.set("optimization.splitChunks.cacheGroups", {});
243
+ this.set("optimization.splitChunks.cacheGroups.default", {
244
+ automaticNamePrefix: "",
245
+ reuseExistingChunk: true,
246
+ minChunks: 2,
247
+ priority: -20
248
+ });
249
+ this.set("optimization.splitChunks.cacheGroups.vendors", {
250
+ automaticNamePrefix: "vendors",
251
+ test: /[\\/]node_modules[\\/]/,
252
+ priority: -10
253
+ });
254
+ this.set("optimization.runtimeChunk", "call", value => {
255
+ if (value === "single") {
256
+ return {
257
+ name: "runtime"
258
+ };
259
+ }
260
+ if (value === true || value === "multiple") {
261
+ return {
262
+ name: entrypoint => `runtime~${entrypoint.name}`
263
+ };
264
+ }
265
+ return value;
266
+ });
267
+ this.set("optimization.noEmitOnErrors", "make", options =>
268
+ isProductionLikeMode(options)
269
+ );
270
+ this.set("optimization.checkWasmTypes", "make", options =>
271
+ isProductionLikeMode(options)
272
+ );
273
+ this.set("optimization.mangleWasmImports", false);
274
+ // TODO webpack 5 remove optimization.namedModules
275
+ this.set(
276
+ "optimization.namedModules",
277
+ "make",
278
+ options => options.mode === "development"
279
+ );
280
+ this.set("optimization.hashedModuleIds", false);
281
+ // TODO webpack 5 add `chunkIds: "named"` default for development
282
+ // TODO webpack 5 add `chunkIds: "size"` default for production
283
+ // TODO webpack 5 remove optimization.namedChunks
284
+ this.set(
285
+ "optimization.namedChunks",
286
+ "make",
287
+ options => options.mode === "development"
288
+ );
289
+ this.set(
290
+ "optimization.portableRecords",
291
+ "make",
292
+ options =>
293
+ !!(
294
+ options.recordsInputPath ||
295
+ options.recordsOutputPath ||
296
+ options.recordsPath
297
+ )
298
+ );
299
+ this.set("optimization.minimize", "make", options =>
300
+ isProductionLikeMode(options)
301
+ );
302
+ this.set("optimization.minimizer", "make", options => [
303
+ {
304
+ apply: compiler => {
305
+ // Lazy load the uglifyjs plugin
306
+ const UglifyJsPlugin = require("uglifyjs-webpack-plugin");
307
+ const SourceMapDevToolPlugin = require("./SourceMapDevToolPlugin");
308
+ new UglifyJsPlugin({
309
+ cache: true,
310
+ parallel: true,
311
+ sourceMap:
312
+ (options.devtool && /source-?map/.test(options.devtool)) ||
313
+ (options.plugins &&
314
+ options.plugins.some(p => p instanceof SourceMapDevToolPlugin))
315
+ }).apply(compiler);
316
+ }
317
+ }
318
+ ]);
319
+ this.set("optimization.nodeEnv", "make", options => {
320
+ // TODO: In webpack 5, it should return `false` when mode is `none`
321
+ return options.mode || "production";
322
+ });
323
+
324
+ this.set("resolve", "call", value => Object.assign({}, value));
325
+ this.set("resolve.unsafeCache", true);
326
+ this.set("resolve.modules", ["node_modules"]);
327
+ this.set("resolve.extensions", [".wasm", ".mjs", ".js", ".json"]);
328
+ this.set("resolve.mainFiles", ["index"]);
329
+ this.set("resolve.aliasFields", "make", options => {
330
+ if (options.target === "web" || options.target === "webworker") {
331
+ return ["browser"];
332
+ } else {
333
+ return [];
334
+ }
335
+ });
336
+ this.set("resolve.mainFields", "make", options => {
337
+ if (
338
+ options.target === "web" ||
339
+ options.target === "webworker" ||
340
+ options.target === "electron-renderer"
341
+ ) {
342
+ return ["browser", "module", "main"];
343
+ } else {
344
+ return ["module", "main"];
345
+ }
346
+ });
347
+ this.set("resolve.cacheWithContext", "make", options => {
348
+ return (
349
+ Array.isArray(options.resolve.plugins) &&
350
+ options.resolve.plugins.length > 0
351
+ );
352
+ });
353
+
354
+ this.set("resolveLoader", "call", value => Object.assign({}, value));
355
+ this.set("resolveLoader.unsafeCache", true);
356
+ this.set("resolveLoader.mainFields", ["loader", "main"]);
357
+ this.set("resolveLoader.extensions", [".js", ".json"]);
358
+ this.set("resolveLoader.mainFiles", ["index"]);
359
+ this.set("resolveLoader.cacheWithContext", "make", options => {
360
+ return (
361
+ Array.isArray(options.resolveLoader.plugins) &&
362
+ options.resolveLoader.plugins.length > 0
363
+ );
364
+ });
365
+ }
366
+ }
367
+
368
+ module.exports = WebpackOptionsDefaulter;