webpack 5.71.0 → 5.73.0

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.

Potentially problematic release.


This version of webpack might be problematic. Click here for more details.

Files changed (47) hide show
  1. package/lib/BannerPlugin.js +3 -1
  2. package/lib/ChunkGraph.js +93 -6
  3. package/lib/Compilation.js +5 -1
  4. package/lib/Compiler.js +1 -1
  5. package/lib/DllReferencePlugin.js +1 -1
  6. package/lib/ExportsInfo.js +1 -1
  7. package/lib/Module.js +1 -0
  8. package/lib/NodeStuffPlugin.js +1 -1
  9. package/lib/NormalModule.js +4 -3
  10. package/lib/RuntimePlugin.js +7 -0
  11. package/lib/asset/AssetGenerator.js +36 -9
  12. package/lib/asset/AssetParser.js +1 -0
  13. package/lib/asset/AssetSourceGenerator.js +31 -6
  14. package/lib/asset/AssetSourceParser.js +1 -0
  15. package/lib/cache/PackFileCacheStrategy.js +8 -4
  16. package/lib/config/defaults.js +12 -4
  17. package/lib/container/RemoteRuntimeModule.js +8 -7
  18. package/lib/dependencies/CommonJsImportsParserPlugin.js +342 -61
  19. package/lib/dependencies/CommonJsRequireContextDependency.js +2 -2
  20. package/lib/dependencies/CommonJsRequireDependency.js +2 -1
  21. package/lib/dependencies/ContextDependency.js +15 -2
  22. package/lib/dependencies/ContextDependencyHelpers.js +18 -5
  23. package/lib/dependencies/ContextElementDependency.js +0 -16
  24. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +35 -3
  25. package/lib/dependencies/ImportParserPlugin.js +31 -25
  26. package/lib/dependencies/JsonExportsDependency.js +17 -21
  27. package/lib/dependencies/LoaderDependency.js +13 -0
  28. package/lib/dependencies/LoaderImportDependency.js +13 -0
  29. package/lib/dependencies/ModuleDependency.js +11 -1
  30. package/lib/dependencies/RequireResolveContextDependency.js +2 -2
  31. package/lib/dependencies/RequireResolveDependency.js +2 -1
  32. package/lib/dependencies/URLPlugin.js +21 -0
  33. package/lib/index.js +1 -0
  34. package/lib/javascript/JavascriptParser.js +40 -19
  35. package/lib/json/JsonData.js +8 -0
  36. package/lib/json/JsonParser.js +4 -6
  37. package/lib/optimize/ConcatenatedModule.js +2 -1
  38. package/lib/optimize/ModuleConcatenationPlugin.js +21 -2
  39. package/lib/runtime/AsyncModuleRuntimeModule.js +34 -58
  40. package/lib/runtime/NonceRuntimeModule.js +24 -0
  41. package/lib/sharing/ProvideSharedPlugin.js +1 -2
  42. package/package.json +3 -3
  43. package/schemas/WebpackOptions.check.js +1 -1
  44. package/schemas/WebpackOptions.json +37 -0
  45. package/schemas/plugins/BannerPlugin.check.js +1 -1
  46. package/schemas/plugins/BannerPlugin.json +4 -0
  47. package/types.d.ts +51 -3
@@ -106,7 +106,9 @@ class BannerPlugin {
106
106
  compilation.updateAsset(file, old => {
107
107
  let cached = cache.get(old);
108
108
  if (!cached || cached.comment !== comment) {
109
- const source = new ConcatSource(comment, "\n", old);
109
+ const source = options.footer
110
+ ? new ConcatSource(old, "\n", comment)
111
+ : new ConcatSource(comment, "\n", old);
110
112
  cache.set(old, { source, comment });
111
113
  return source;
112
114
  }
package/lib/ChunkGraph.js CHANGED
@@ -85,14 +85,17 @@ const getModuleRuntimes = chunks => {
85
85
  };
86
86
 
87
87
  /**
88
- * @param {SortableSet<Module>} set the set
89
- * @returns {Map<string, SortableSet<Module>>} modules by source type
88
+ * @param {WeakMap<Module, Set<string>> | undefined} sourceTypesByModule sourceTypesByModule
89
+ * @returns {function (SortableSet<Module>): Map<string, SortableSet<Module>>} modules by source type
90
90
  */
91
- const modulesBySourceType = set => {
91
+ const modulesBySourceType = sourceTypesByModule => set => {
92
92
  /** @type {Map<string, SortableSet<Module>>} */
93
93
  const map = new Map();
94
94
  for (const module of set) {
95
- for (const sourceType of module.getSourceTypes()) {
95
+ const sourceTypes =
96
+ (sourceTypesByModule && sourceTypesByModule.get(module)) ||
97
+ module.getSourceTypes();
98
+ for (const sourceType of sourceTypes) {
96
99
  let innerSet = map.get(sourceType);
97
100
  if (innerSet === undefined) {
98
101
  innerSet = new SortableSet();
@@ -110,6 +113,7 @@ const modulesBySourceType = set => {
110
113
  }
111
114
  return map;
112
115
  };
116
+ const defaultModulesBySourceType = modulesBySourceType(undefined);
113
117
 
114
118
  /** @type {WeakMap<Function, any>} */
115
119
  const createOrderedArrayFunctionMap = new WeakMap();
@@ -201,6 +205,8 @@ class ChunkGraphChunk {
201
205
  constructor() {
202
206
  /** @type {SortableSet<Module>} */
203
207
  this.modules = new SortableSet();
208
+ /** @type {WeakMap<Module, Set<string>> | undefined} */
209
+ this.sourceTypesByModule = undefined;
204
210
  /** @type {Map<Module, Entrypoint>} */
205
211
  this.entryModules = new Map();
206
212
  /** @type {SortableSet<RuntimeModule>} */
@@ -213,6 +219,8 @@ class ChunkGraphChunk {
213
219
  this.runtimeRequirements = undefined;
214
220
  /** @type {Set<string>} */
215
221
  this.runtimeRequirementsInTree = new Set();
222
+
223
+ this._modulesBySourceType = defaultModulesBySourceType;
216
224
  }
217
225
  }
218
226
 
@@ -315,6 +323,8 @@ class ChunkGraph {
315
323
  const cgm = this._getChunkGraphModule(module);
316
324
  const cgc = this._getChunkGraphChunk(chunk);
317
325
  cgc.modules.delete(module);
326
+ // No need to invalidate cgc._modulesBySourceType because we modified cgc.modules anyway
327
+ if (cgc.sourceTypesByModule) cgc.sourceTypesByModule.delete(module);
318
328
  cgm.chunks.delete(chunk);
319
329
  }
320
330
 
@@ -568,11 +578,84 @@ class ChunkGraph {
568
578
  getChunkModulesIterableBySourceType(chunk, sourceType) {
569
579
  const cgc = this._getChunkGraphChunk(chunk);
570
580
  const modulesWithSourceType = cgc.modules
571
- .getFromUnorderedCache(modulesBySourceType)
581
+ .getFromUnorderedCache(cgc._modulesBySourceType)
572
582
  .get(sourceType);
573
583
  return modulesWithSourceType;
574
584
  }
575
585
 
586
+ /**
587
+ * @param {Chunk} chunk chunk
588
+ * @param {Module} module chunk module
589
+ * @param {Set<string>} sourceTypes source types
590
+ */
591
+ setChunkModuleSourceTypes(chunk, module, sourceTypes) {
592
+ const cgc = this._getChunkGraphChunk(chunk);
593
+ if (cgc.sourceTypesByModule === undefined) {
594
+ cgc.sourceTypesByModule = new WeakMap();
595
+ }
596
+ cgc.sourceTypesByModule.set(module, sourceTypes);
597
+ // Update cgc._modulesBySourceType to invalidate the cache
598
+ cgc._modulesBySourceType = modulesBySourceType(cgc.sourceTypesByModule);
599
+ }
600
+
601
+ /**
602
+ * @param {Chunk} chunk chunk
603
+ * @param {Module} module chunk module
604
+ * @returns {Set<string>} source types
605
+ */
606
+ getChunkModuleSourceTypes(chunk, module) {
607
+ const cgc = this._getChunkGraphChunk(chunk);
608
+ if (cgc.sourceTypesByModule === undefined) {
609
+ return module.getSourceTypes();
610
+ }
611
+ return cgc.sourceTypesByModule.get(module) || module.getSourceTypes();
612
+ }
613
+
614
+ /**
615
+ * @param {Module} module module
616
+ * @returns {Set<string>} source types
617
+ */
618
+ getModuleSourceTypes(module) {
619
+ return (
620
+ this._getOverwrittenModuleSourceTypes(module) || module.getSourceTypes()
621
+ );
622
+ }
623
+
624
+ /**
625
+ * @param {Module} module module
626
+ * @returns {Set<string> | undefined} source types
627
+ */
628
+ _getOverwrittenModuleSourceTypes(module) {
629
+ let newSet = false;
630
+ let sourceTypes;
631
+ for (const chunk of this.getModuleChunksIterable(module)) {
632
+ const cgc = this._getChunkGraphChunk(chunk);
633
+ if (cgc.sourceTypesByModule === undefined) return;
634
+ const st = cgc.sourceTypesByModule.get(module);
635
+ if (st === undefined) return;
636
+ if (!sourceTypes) {
637
+ sourceTypes = st;
638
+ continue;
639
+ } else if (!newSet) {
640
+ for (const type of st) {
641
+ if (!newSet) {
642
+ if (!sourceTypes.has(type)) {
643
+ newSet = true;
644
+ sourceTypes = new Set(sourceTypes);
645
+ sourceTypes.add(type);
646
+ }
647
+ } else {
648
+ sourceTypes.add(type);
649
+ }
650
+ }
651
+ } else {
652
+ for (const type of st) sourceTypes.add(type);
653
+ }
654
+ }
655
+
656
+ return sourceTypes;
657
+ }
658
+
576
659
  /**
577
660
  * @param {Chunk} chunk the chunk
578
661
  * @param {function(Module, Module): -1|0|1} comparator comparator function
@@ -593,7 +676,7 @@ class ChunkGraph {
593
676
  getOrderedChunkModulesIterableBySourceType(chunk, sourceType, comparator) {
594
677
  const cgc = this._getChunkGraphChunk(chunk);
595
678
  const modulesWithSourceType = cgc.modules
596
- .getFromUnorderedCache(modulesBySourceType)
679
+ .getFromUnorderedCache(cgc._modulesBySourceType)
597
680
  .get(sourceType);
598
681
  if (modulesWithSourceType === undefined) return undefined;
599
682
  modulesWithSourceType.sortWith(comparator);
@@ -1473,6 +1556,10 @@ Caller might not support runtime-dependent code generation (opt-out via optimiza
1473
1556
  const graphHash = cgm.graphHashes.provide(runtime, () => {
1474
1557
  const hash = createHash(this._hashFunction);
1475
1558
  hash.update(`${cgm.id}${this.moduleGraph.isAsync(module)}`);
1559
+ const sourceTypes = this._getOverwrittenModuleSourceTypes(module);
1560
+ if (sourceTypes !== undefined) {
1561
+ for (const type of sourceTypes) hash.update(type);
1562
+ }
1476
1563
  this.moduleGraph.getExportsInfo(module).updateHash(hash, runtime);
1477
1564
  return BigInt(`0x${/** @type {string} */ (hash.digest("hex"))}`);
1478
1565
  });
@@ -4241,7 +4241,11 @@ This prevents using hashes of each other and should be avoided.`);
4241
4241
  if (!isSourceEqual(this.assets[file], source)) {
4242
4242
  this.errors.push(
4243
4243
  new WebpackError(
4244
- `Conflict: Multiple assets emit different content to the same filename ${file}`
4244
+ `Conflict: Multiple assets emit different content to the same filename ${file}${
4245
+ assetInfo.sourceFilename
4246
+ ? `. Original source ${assetInfo.sourceFilename}`
4247
+ : ""
4248
+ }`
4245
4249
  )
4246
4250
  );
4247
4251
  this.assets[file] = source;
package/lib/Compiler.js CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const parseJson = require("json-parse-better-errors");
8
+ const parseJson = require("json-parse-even-better-errors");
9
9
  const asyncLib = require("neo-async");
10
10
  const {
11
11
  SyncHook,
@@ -5,7 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const parseJson = require("json-parse-better-errors");
8
+ const parseJson = require("json-parse-even-better-errors");
9
9
  const DelegatedModuleFactoryPlugin = require("./DelegatedModuleFactoryPlugin");
10
10
  const ExternalModuleFactoryPlugin = require("./ExternalModuleFactoryPlugin");
11
11
  const WebpackError = require("./WebpackError");
@@ -584,7 +584,7 @@ class ExportsInfo {
584
584
  if (info.exportsInfo && name.length > 1) {
585
585
  return info.exportsInfo.isExportProvided(name.slice(1));
586
586
  }
587
- return info.provided;
587
+ return info.provided ? name.length === 1 || undefined : info.provided;
588
588
  }
589
589
  const info = this.getReadOnlyExportInfo(name);
590
590
  return info.provided;
package/lib/Module.js CHANGED
@@ -60,6 +60,7 @@ const makeSerializable = require("./util/makeSerializable");
60
60
  * @property {ConcatenationScope=} concatenationScope when in concatenated module, information about other concatenated modules
61
61
  * @property {CodeGenerationResults} codeGenerationResults code generation results of other modules (need to have a codeGenerationDependency to use that)
62
62
  * @property {Compilation=} compilation the compilation
63
+ * @property {ReadonlySet<string>=} sourceTypes source types
63
64
  */
64
65
 
65
66
  /**
@@ -64,7 +64,7 @@ class NodeStuffPlugin {
64
64
  new NodeStuffInWebError(
65
65
  dep.loc,
66
66
  "global",
67
- "The global namespace object is Node.js feature and doesn't present in browser."
67
+ "The global namespace object is a Node.js feature and isn't available in browsers."
68
68
  )
69
69
  );
70
70
  }
@@ -5,7 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const parseJson = require("json-parse-better-errors");
8
+ const parseJson = require("json-parse-even-better-errors");
9
9
  const { getContext, runLoaders } = require("loader-runner");
10
10
  const querystring = require("querystring");
11
11
  const { HookMap, SyncHook, AsyncSeriesBailHook } = require("tapable");
@@ -1176,7 +1176,8 @@ class NormalModule extends Module {
1176
1176
  chunkGraph,
1177
1177
  runtime,
1178
1178
  concatenationScope,
1179
- codeGenerationResults
1179
+ codeGenerationResults,
1180
+ sourceTypes
1180
1181
  }) {
1181
1182
  /** @type {Set<string>} */
1182
1183
  const runtimeRequirements = new Set();
@@ -1195,7 +1196,7 @@ class NormalModule extends Module {
1195
1196
  };
1196
1197
 
1197
1198
  const sources = new Map();
1198
- for (const type of this.generator.getTypes(this)) {
1199
+ for (const type of sourceTypes || chunkGraph.getModuleSourceTypes(this)) {
1199
1200
  const source = this.error
1200
1201
  ? new RawSource(
1201
1202
  "throw new Error(" + JSON.stringify(this.error.message) + ");"
@@ -26,6 +26,7 @@ const GlobalRuntimeModule = require("./runtime/GlobalRuntimeModule");
26
26
  const HasOwnPropertyRuntimeModule = require("./runtime/HasOwnPropertyRuntimeModule");
27
27
  const LoadScriptRuntimeModule = require("./runtime/LoadScriptRuntimeModule");
28
28
  const MakeNamespaceObjectRuntimeModule = require("./runtime/MakeNamespaceObjectRuntimeModule");
29
+ const NonceRuntimeModule = require("./runtime/NonceRuntimeModule");
29
30
  const OnChunksLoadedRuntimeModule = require("./runtime/OnChunksLoadedRuntimeModule");
30
31
  const PublicPathRuntimeModule = require("./runtime/PublicPathRuntimeModule");
31
32
  const RelativeUrlRuntimeModule = require("./runtime/RelativeUrlRuntimeModule");
@@ -431,6 +432,12 @@ class RuntimePlugin {
431
432
  return true;
432
433
  }
433
434
  });
435
+ compilation.hooks.runtimeRequirementInTree
436
+ .for(RuntimeGlobals.scriptNonce)
437
+ .tap("RuntimePlugin", chunk => {
438
+ compilation.addRuntimeModule(chunk, new NonceRuntimeModule());
439
+ return true;
440
+ });
434
441
  // TODO webpack 6: remove CompatRuntimeModule
435
442
  compilation.hooks.additionalTreeRuntimeRequirements.tap(
436
443
  "RuntimePlugin",
@@ -8,6 +8,7 @@
8
8
  const mimeTypes = require("mime-types");
9
9
  const path = require("path");
10
10
  const { RawSource } = require("webpack-sources");
11
+ const ConcatenationScope = require("../ConcatenationScope");
11
12
  const Generator = require("../Generator");
12
13
  const RuntimeGlobals = require("../RuntimeGlobals");
13
14
  const createHash = require("../util/createHash");
@@ -23,6 +24,7 @@ const nonNumericOnlyHash = require("../util/nonNumericOnlyHash");
23
24
  /** @typedef {import("../Generator").GenerateContext} GenerateContext */
24
25
  /** @typedef {import("../Generator").UpdateHashContext} UpdateHashContext */
25
26
  /** @typedef {import("../Module")} Module */
27
+ /** @typedef {import("../Module").ConcatenationBailoutReasonContext} ConcatenationBailoutReasonContext */
26
28
  /** @typedef {import("../NormalModule")} NormalModule */
27
29
  /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
28
30
  /** @typedef {import("../util/Hash")} Hash */
@@ -145,6 +147,15 @@ class AssetGenerator extends Generator {
145
147
  ).replace(/^\.\//, "");
146
148
  }
147
149
 
150
+ /**
151
+ * @param {NormalModule} module module for which the bailout reason should be determined
152
+ * @param {ConcatenationBailoutReasonContext} context context
153
+ * @returns {string | undefined} reason why this module can't be concatenated, undefined when it can be concatenated
154
+ */
155
+ getConcatenationBailoutReason(module, context) {
156
+ return undefined;
157
+ }
158
+
148
159
  /**
149
160
  * @param {NormalModule} module module
150
161
  * @returns {string} mime type
@@ -198,14 +209,21 @@ class AssetGenerator extends Generator {
198
209
  */
199
210
  generate(
200
211
  module,
201
- { runtime, chunkGraph, runtimeTemplate, runtimeRequirements, type, getData }
212
+ {
213
+ runtime,
214
+ concatenationScope,
215
+ chunkGraph,
216
+ runtimeTemplate,
217
+ runtimeRequirements,
218
+ type,
219
+ getData
220
+ }
202
221
  ) {
203
222
  switch (type) {
204
223
  case "asset":
205
224
  return module.originalSource();
206
225
  default: {
207
- runtimeRequirements.add(RuntimeGlobals.module);
208
-
226
+ let content;
209
227
  const originalSource = module.originalSource();
210
228
  if (module.buildInfo.dataUrl) {
211
229
  let encodedSource;
@@ -255,11 +273,7 @@ class AssetGenerator extends Generator {
255
273
  }
256
274
  const data = getData();
257
275
  data.set("url", Buffer.from(encodedSource));
258
- return new RawSource(
259
- `${RuntimeGlobals.module}.exports = ${JSON.stringify(
260
- encodedSource
261
- )};`
262
- );
276
+ content = JSON.stringify(encodedSource);
263
277
  } else {
264
278
  const assetModuleFilename =
265
279
  this.filename || runtimeTemplate.outputOptions.assetModuleFilename;
@@ -343,9 +357,22 @@ class AssetGenerator extends Generator {
343
357
  data.set("filename", filename);
344
358
  data.set("assetInfo", assetInfo);
345
359
  }
360
+ content = assetPath;
361
+ }
346
362
 
363
+ if (concatenationScope) {
364
+ concatenationScope.registerNamespaceExport(
365
+ ConcatenationScope.NAMESPACE_OBJECT_EXPORT
366
+ );
367
+ return new RawSource(
368
+ `${runtimeTemplate.supportsConst() ? "const" : "var"} ${
369
+ ConcatenationScope.NAMESPACE_OBJECT_EXPORT
370
+ } = ${content};`
371
+ );
372
+ } else {
373
+ runtimeRequirements.add(RuntimeGlobals.module);
347
374
  return new RawSource(
348
- `${RuntimeGlobals.module}.exports = ${assetPath};`
375
+ `${RuntimeGlobals.module}.exports = ${content};`
349
376
  );
350
377
  }
351
378
  }
@@ -31,6 +31,7 @@ class AssetParser extends Parser {
31
31
  }
32
32
  state.module.buildInfo.strict = true;
33
33
  state.module.buildMeta.exportsType = "default";
34
+ state.module.buildMeta.defaultObject = false;
34
35
 
35
36
  if (typeof this.dataUrlCondition === "function") {
36
37
  state.module.buildInfo.dataUrl = this.dataUrlCondition(source, {
@@ -6,11 +6,13 @@
6
6
  "use strict";
7
7
 
8
8
  const { RawSource } = require("webpack-sources");
9
+ const ConcatenationScope = require("../ConcatenationScope");
9
10
  const Generator = require("../Generator");
10
11
  const RuntimeGlobals = require("../RuntimeGlobals");
11
12
 
12
13
  /** @typedef {import("webpack-sources").Source} Source */
13
14
  /** @typedef {import("../Generator").GenerateContext} GenerateContext */
15
+ /** @typedef {import("../Module").ConcatenationBailoutReasonContext} ConcatenationBailoutReasonContext */
14
16
  /** @typedef {import("../NormalModule")} NormalModule */
15
17
 
16
18
  const TYPES = new Set(["javascript"]);
@@ -21,9 +23,10 @@ class AssetSourceGenerator extends Generator {
21
23
  * @param {GenerateContext} generateContext context for generate
22
24
  * @returns {Source} generated code
23
25
  */
24
- generate(module, { chunkGraph, runtimeTemplate, runtimeRequirements }) {
25
- runtimeRequirements.add(RuntimeGlobals.module);
26
-
26
+ generate(
27
+ module,
28
+ { concatenationScope, chunkGraph, runtimeTemplate, runtimeRequirements }
29
+ ) {
27
30
  const originalSource = module.originalSource();
28
31
 
29
32
  if (!originalSource) {
@@ -38,9 +41,31 @@ class AssetSourceGenerator extends Generator {
38
41
  } else {
39
42
  encodedSource = content.toString("utf-8");
40
43
  }
41
- return new RawSource(
42
- `${RuntimeGlobals.module}.exports = ${JSON.stringify(encodedSource)};`
43
- );
44
+
45
+ let sourceContent;
46
+ if (concatenationScope) {
47
+ concatenationScope.registerNamespaceExport(
48
+ ConcatenationScope.NAMESPACE_OBJECT_EXPORT
49
+ );
50
+ sourceContent = `${runtimeTemplate.supportsConst() ? "const" : "var"} ${
51
+ ConcatenationScope.NAMESPACE_OBJECT_EXPORT
52
+ } = ${JSON.stringify(encodedSource)};`;
53
+ } else {
54
+ runtimeRequirements.add(RuntimeGlobals.module);
55
+ sourceContent = `${RuntimeGlobals.module}.exports = ${JSON.stringify(
56
+ encodedSource
57
+ )};`;
58
+ }
59
+ return new RawSource(sourceContent);
60
+ }
61
+
62
+ /**
63
+ * @param {NormalModule} module module for which the bailout reason should be determined
64
+ * @param {ConcatenationBailoutReasonContext} context context
65
+ * @returns {string | undefined} reason why this module can't be concatenated, undefined when it can be concatenated
66
+ */
67
+ getConcatenationBailoutReason(module, context) {
68
+ return undefined;
44
69
  }
45
70
 
46
71
  /**
@@ -23,6 +23,7 @@ class AssetSourceParser extends Parser {
23
23
  const { module } = state;
24
24
  module.buildInfo.strict = true;
25
25
  module.buildMeta.exportsType = "default";
26
+ state.module.buildMeta.defaultObject = false;
26
27
 
27
28
  return state;
28
29
  }
@@ -639,10 +639,14 @@ class PackContentItems {
639
639
  } catch (e) {
640
640
  rollback(s);
641
641
  if (e === NOT_SERIALIZABLE) continue;
642
- logger.warn(
643
- `Skipped not serializable cache item '${key}': ${e.message}`
644
- );
645
- logger.debug(e.stack);
642
+ const msg = "Skipped not serializable cache item";
643
+ if (e.message.includes("ModuleBuildError")) {
644
+ logger.log(`${msg} (in build error): ${e.message}`);
645
+ logger.debug(`${msg} '${key}' (in build error): ${e.stack}`);
646
+ } else {
647
+ logger.warn(`${msg}: ${e.message}`);
648
+ logger.debug(`${msg} '${key}': ${e.stack}`);
649
+ }
646
650
  }
647
651
  }
648
652
  write(null);
@@ -190,7 +190,8 @@ const applyWebpackOptionsDefaults = options => {
190
190
  syncWebAssembly: options.experiments.syncWebAssembly,
191
191
  asyncWebAssembly: options.experiments.asyncWebAssembly,
192
192
  css: options.experiments.css,
193
- futureDefaults
193
+ futureDefaults,
194
+ isNode: targetProperties && targetProperties.node === true
194
195
  });
195
196
 
196
197
  applyOutputDefaults(options.output, {
@@ -451,11 +452,12 @@ const applySnapshotDefaults = (snapshot, { production, futureDefaults }) => {
451
452
  * @param {JavascriptParserOptions} parserOptions parser options
452
453
  * @param {Object} options options
453
454
  * @param {boolean} options.futureDefaults is future defaults enabled
455
+ * @param {boolean} options.isNode is node target platform
454
456
  * @returns {void}
455
457
  */
456
458
  const applyJavascriptParserOptionsDefaults = (
457
459
  parserOptions,
458
- { futureDefaults }
460
+ { futureDefaults, isNode }
459
461
  ) => {
460
462
  D(parserOptions, "unknownContextRequest", ".");
461
463
  D(parserOptions, "unknownContextRegExp", false);
@@ -470,6 +472,10 @@ const applyJavascriptParserOptionsDefaults = (
470
472
  D(parserOptions, "wrappedContextCritical", false);
471
473
  D(parserOptions, "strictThisContextOnImports", false);
472
474
  D(parserOptions, "importMeta", true);
475
+ D(parserOptions, "dynamicImportMode", "lazy");
476
+ D(parserOptions, "dynamicImportPrefetch", false);
477
+ D(parserOptions, "dynamicImportPreload", false);
478
+ D(parserOptions, "createRequire", isNode);
473
479
  if (futureDefaults) D(parserOptions, "exportsPresence", "error");
474
480
  };
475
481
 
@@ -481,11 +487,12 @@ const applyJavascriptParserOptionsDefaults = (
481
487
  * @param {boolean} options.asyncWebAssembly is asyncWebAssembly enabled
482
488
  * @param {CssExperimentOptions} options.css is css enabled
483
489
  * @param {boolean} options.futureDefaults is future defaults enabled
490
+ * @param {boolean} options.isNode is node target platform
484
491
  * @returns {void}
485
492
  */
486
493
  const applyModuleDefaults = (
487
494
  module,
488
- { cache, syncWebAssembly, asyncWebAssembly, css, futureDefaults }
495
+ { cache, syncWebAssembly, asyncWebAssembly, css, futureDefaults, isNode }
489
496
  ) => {
490
497
  if (cache) {
491
498
  D(module, "unsafeCache", module => {
@@ -504,7 +511,8 @@ const applyModuleDefaults = (
504
511
 
505
512
  F(module.parser, "javascript", () => ({}));
506
513
  applyJavascriptParserOptionsDefaults(module.parser.javascript, {
507
- futureDefaults
514
+ futureDefaults,
515
+ isNode
508
516
  });
509
517
 
510
518
  A(module, "defaultRules", () => {
@@ -73,9 +73,9 @@ class RemoteRuntimeModule extends RuntimeModule {
73
73
  Template.indent(
74
74
  `error.message += '\\nwhile loading "' + data[1] + '" from ' + data[2];`
75
75
  ),
76
- `__webpack_modules__[id] = ${runtimeTemplate.basicFunction("", [
77
- "throw error;"
78
- ])}`,
76
+ `${
77
+ RuntimeGlobals.moduleFactories
78
+ }[id] = ${runtimeTemplate.basicFunction("", ["throw error;"])}`,
79
79
  "data.p = 0;"
80
80
  ])};`,
81
81
  `var handleFunction = ${runtimeTemplate.basicFunction(
@@ -111,10 +111,11 @@ class RemoteRuntimeModule extends RuntimeModule {
111
111
  )};`,
112
112
  `var onFactory = ${runtimeTemplate.basicFunction("factory", [
113
113
  "data.p = 1;",
114
- `__webpack_modules__[id] = ${runtimeTemplate.basicFunction(
115
- "module",
116
- ["module.exports = factory();"]
117
- )}`
114
+ `${
115
+ RuntimeGlobals.moduleFactories
116
+ }[id] = ${runtimeTemplate.basicFunction("module", [
117
+ "module.exports = factory();"
118
+ ])}`
118
119
  ])};`,
119
120
  "handleFunction(__webpack_require__, data[2], 0, 0, onExternal, 1);"
120
121
  ])});`