webpack 5.102.1 → 5.103.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.
Files changed (118) hide show
  1. package/README.md +121 -134
  2. package/lib/CompatibilityPlugin.js +25 -2
  3. package/lib/Compilation.js +25 -2
  4. package/lib/ConcatenationScope.js +0 -15
  5. package/lib/CssModule.js +6 -1
  6. package/lib/DefinePlugin.js +11 -11
  7. package/lib/Dependency.js +8 -1
  8. package/lib/DependencyTemplate.js +1 -0
  9. package/lib/DotenvPlugin.js +457 -0
  10. package/lib/EnvironmentPlugin.js +19 -16
  11. package/lib/EvalSourceMapDevToolPlugin.js +16 -0
  12. package/lib/ExportsInfo.js +6 -2
  13. package/lib/ExternalModule.js +20 -28
  14. package/lib/ExternalModuleFactoryPlugin.js +10 -8
  15. package/lib/ExternalsPlugin.js +2 -1
  16. package/lib/ManifestPlugin.js +235 -0
  17. package/lib/Module.js +3 -0
  18. package/lib/ModuleGraph.js +2 -1
  19. package/lib/ModuleSourceTypesConstants.js +0 -6
  20. package/lib/MultiCompiler.js +1 -1
  21. package/lib/NodeStuffPlugin.js +419 -121
  22. package/lib/NormalModule.js +17 -16
  23. package/lib/RuntimeGlobals.js +22 -4
  24. package/lib/RuntimePlugin.js +27 -6
  25. package/lib/RuntimeTemplate.js +115 -56
  26. package/lib/SourceMapDevToolPlugin.js +20 -0
  27. package/lib/WebpackOptionsApply.js +33 -9
  28. package/lib/asset/AssetBytesGenerator.js +1 -1
  29. package/lib/asset/AssetGenerator.js +1 -2
  30. package/lib/asset/AssetSourceGenerator.js +1 -1
  31. package/lib/config/browserslistTargetHandler.js +5 -0
  32. package/lib/config/defaults.js +98 -18
  33. package/lib/config/normalization.js +2 -1
  34. package/lib/config/target.js +6 -0
  35. package/lib/css/CssGenerator.js +283 -57
  36. package/lib/css/CssLoadingRuntimeModule.js +2 -0
  37. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +56 -0
  38. package/lib/css/CssModulesPlugin.js +84 -34
  39. package/lib/css/CssParser.js +1174 -667
  40. package/lib/css/walkCssTokens.js +97 -0
  41. package/lib/dependencies/CommonJsImportsParserPlugin.js +0 -9
  42. package/lib/dependencies/CommonJsPlugin.js +12 -0
  43. package/lib/dependencies/CssIcssExportDependency.js +247 -8
  44. package/lib/dependencies/CssIcssFromIdentifierDependency.js +124 -0
  45. package/lib/dependencies/CssIcssGlobalIdentifierDependency.js +48 -0
  46. package/lib/dependencies/CssIcssImportDependency.js +60 -54
  47. package/lib/dependencies/CssIcssLocalIdentifierDependency.js +61 -0
  48. package/lib/dependencies/{CssSelfLocalIdentifierDependency.js → CssIcssSelfLocalIdentifierDependency.js} +88 -10
  49. package/lib/dependencies/CssIcssSymbolDependency.js +31 -29
  50. package/lib/dependencies/CssImportDependency.js +15 -5
  51. package/lib/dependencies/ExternalModuleInitFragment.js +1 -1
  52. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +95 -0
  53. package/lib/dependencies/HarmonyAcceptDependency.js +6 -1
  54. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -1
  55. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +12 -1
  56. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +32 -21
  57. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +12 -8
  58. package/lib/dependencies/HarmonyImportDependency.js +23 -27
  59. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +28 -69
  60. package/lib/dependencies/HarmonyImportSideEffectDependency.js +4 -3
  61. package/lib/dependencies/HarmonyImportSpecifierDependency.js +10 -8
  62. package/lib/dependencies/ImportDependency.js +8 -2
  63. package/lib/dependencies/ImportEagerDependency.js +6 -3
  64. package/lib/dependencies/ImportMetaPlugin.js +97 -9
  65. package/lib/dependencies/ImportParserPlugin.js +19 -21
  66. package/lib/dependencies/ImportPhase.js +121 -0
  67. package/lib/dependencies/ImportWeakDependency.js +6 -3
  68. package/lib/dependencies/ModuleDependency.js +5 -1
  69. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  70. package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -8
  71. package/lib/hmr/LazyCompilationPlugin.js +1 -0
  72. package/lib/ids/IdHelpers.js +4 -1
  73. package/lib/index.js +6 -0
  74. package/lib/javascript/ChunkHelpers.js +16 -5
  75. package/lib/javascript/JavascriptGenerator.js +101 -101
  76. package/lib/javascript/JavascriptModulesPlugin.js +23 -13
  77. package/lib/javascript/JavascriptParser.js +142 -38
  78. package/lib/json/JsonParser.js +7 -1
  79. package/lib/library/ModuleLibraryPlugin.js +0 -10
  80. package/lib/library/SystemLibraryPlugin.js +4 -0
  81. package/lib/library/UmdLibraryPlugin.js +1 -1
  82. package/lib/node/NodeTargetPlugin.js +9 -1
  83. package/lib/node/ReadFileCompileWasmPlugin.js +0 -2
  84. package/lib/optimize/ConcatenatedModule.js +161 -135
  85. package/lib/runtime/AsyncModuleRuntimeModule.js +28 -18
  86. package/lib/runtime/AutoPublicPathRuntimeModule.js +8 -3
  87. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +89 -55
  88. package/lib/util/comparators.js +4 -3
  89. package/lib/util/internalSerializables.js +4 -4
  90. package/lib/util/jsonParseEvenBetterErrors.js +10 -0
  91. package/lib/wasm/EnableWasmLoadingPlugin.js +10 -4
  92. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +8 -5
  93. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +8 -4
  94. package/lib/web/FetchCompileWasmPlugin.js +0 -2
  95. package/lib/webpack.js +85 -82
  96. package/module.d.ts +5 -0
  97. package/package.json +16 -14
  98. package/schemas/WebpackOptions.check.js +1 -1
  99. package/schemas/WebpackOptions.json +109 -27
  100. package/schemas/plugins/ManifestPlugin.check.d.ts +7 -0
  101. package/schemas/plugins/ManifestPlugin.check.js +6 -0
  102. package/schemas/plugins/ManifestPlugin.json +98 -0
  103. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  104. package/schemas/plugins/SourceMapDevToolPlugin.json +16 -3
  105. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  106. package/schemas/plugins/container/ContainerReferencePlugin.json +4 -1
  107. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  108. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  109. package/schemas/plugins/container/ModuleFederationPlugin.json +4 -1
  110. package/schemas/plugins/css/CssAutoParserOptions.check.js +1 -1
  111. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +1 -1
  112. package/schemas/plugins/css/CssGlobalParserOptions.check.js +1 -1
  113. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +1 -1
  114. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  115. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  116. package/schemas/plugins/json/JsonModulesPluginParser.check.js +1 -1
  117. package/types.d.ts +560 -293
  118. package/lib/dependencies/CssLocalIdentifierDependency.js +0 -250
@@ -29,11 +29,13 @@ const SelfModuleFactory = require("../SelfModuleFactory");
29
29
  const Template = require("../Template");
30
30
  const WebpackError = require("../WebpackError");
31
31
  const CssIcssExportDependency = require("../dependencies/CssIcssExportDependency");
32
+ const CssIcssFromIdentifierDependency = require("../dependencies/CssIcssFromIdentifierDependency");
33
+ const CssIcssGlobalIdentifierDependency = require("../dependencies/CssIcssGlobalIdentifierDependency");
32
34
  const CssIcssImportDependency = require("../dependencies/CssIcssImportDependency");
35
+ const CssIcssLocalIdentifierDependency = require("../dependencies/CssIcssLocalIdentifierDependency");
36
+ const CssIcssSelfLocalIdentifierDependency = require("../dependencies/CssIcssSelfLocalIdentifierDependency");
33
37
  const CssIcssSymbolDependency = require("../dependencies/CssIcssSymbolDependency");
34
38
  const CssImportDependency = require("../dependencies/CssImportDependency");
35
- const CssLocalIdentifierDependency = require("../dependencies/CssLocalIdentifierDependency");
36
- const CssSelfLocalIdentifierDependency = require("../dependencies/CssSelfLocalIdentifierDependency");
37
39
  const CssUrlDependency = require("../dependencies/CssUrlDependency");
38
40
  const StaticExportsDependency = require("../dependencies/StaticExportsDependency");
39
41
  const JavascriptModulesPlugin = require("../javascript/JavascriptModulesPlugin");
@@ -45,6 +47,7 @@ const memoize = require("../util/memoize");
45
47
  const nonNumericOnlyHash = require("../util/nonNumericOnlyHash");
46
48
  const removeBOM = require("../util/removeBOM");
47
49
  const CssGenerator = require("./CssGenerator");
50
+ const CssMergeStyleSheetsRuntimeModule = require("./CssMergeStyleSheetsRuntimeModule");
48
51
  const CssParser = require("./CssParser");
49
52
 
50
53
  /** @typedef {import("webpack-sources").Source} Source */
@@ -62,6 +65,7 @@ const CssParser = require("./CssParser");
62
65
  /** @typedef {import("../Template").RuntimeTemplate} RuntimeTemplate */
63
66
  /** @typedef {import("../TemplatedPathPlugin").TemplatePath} TemplatePath */
64
67
  /** @typedef {import("../util/Hash")} Hash */
68
+ /** @typedef {import("../Module").BuildMeta} BuildMeta */
65
69
 
66
70
  /**
67
71
  * @typedef {object} RenderContext
@@ -76,11 +80,13 @@ const CssParser = require("./CssParser");
76
80
 
77
81
  /**
78
82
  * @typedef {object} ChunkRenderContext
79
- * @property {Chunk} chunk the chunk
80
- * @property {ChunkGraph} chunkGraph the chunk graph
81
- * @property {CodeGenerationResults} codeGenerationResults results of code generation
83
+ * @property {Chunk=} chunk the chunk
84
+ * @property {ChunkGraph=} chunkGraph the chunk graph
85
+ * @property {CodeGenerationResults=} codeGenerationResults results of code generation
82
86
  * @property {RuntimeTemplate} runtimeTemplate the runtime template
83
87
  * @property {string} undoPath undo path to css file
88
+ * @property {WeakMap<Source, ModuleFactoryCacheEntry>} moduleFactoryCache moduleFactoryCache
89
+ * @property {Source} moduleSourceContent content
84
90
  */
85
91
 
86
92
  /**
@@ -89,6 +95,13 @@ const CssParser = require("./CssParser");
89
95
  * @property {SyncHook<[Chunk, Hash, ChunkHashContext]>} chunkHash
90
96
  */
91
97
 
98
+ /**
99
+ * @typedef {object} ModuleFactoryCacheEntry
100
+ * @property {string} undoPath - The undo path to the CSS file
101
+ * @property {Inheritance} inheritance - The inheritance chain
102
+ * @property {CachedSource} source - The cached source
103
+ */
104
+
92
105
  const getCssLoadingRuntimeModule = memoize(() =>
93
106
  require("./CssLoadingRuntimeModule")
94
107
  );
@@ -192,7 +205,7 @@ class CssModulesPlugin {
192
205
  }
193
206
 
194
207
  constructor() {
195
- /** @type {WeakMap<Source, { undoPath: string, inheritance: Inheritance, source: CachedSource }>} */
208
+ /** @type {WeakMap<Source, ModuleFactoryCacheEntry>} */
196
209
  this._moduleFactoryCache = new WeakMap();
197
210
  }
198
211
 
@@ -224,16 +237,16 @@ class CssModulesPlugin {
224
237
  new CssUrlDependency.Template()
225
238
  );
226
239
  compilation.dependencyTemplates.set(
227
- CssLocalIdentifierDependency,
228
- new CssLocalIdentifierDependency.Template()
240
+ CssIcssLocalIdentifierDependency,
241
+ new CssIcssLocalIdentifierDependency.Template()
229
242
  );
230
243
  compilation.dependencyFactories.set(
231
- CssSelfLocalIdentifierDependency,
244
+ CssIcssSelfLocalIdentifierDependency,
232
245
  selfFactory
233
246
  );
234
247
  compilation.dependencyTemplates.set(
235
- CssSelfLocalIdentifierDependency,
236
- new CssSelfLocalIdentifierDependency.Template()
248
+ CssIcssSelfLocalIdentifierDependency,
249
+ new CssIcssSelfLocalIdentifierDependency.Template()
237
250
  );
238
251
  compilation.dependencyFactories.set(
239
252
  CssIcssImportDependency,
@@ -243,6 +256,22 @@ class CssModulesPlugin {
243
256
  CssIcssImportDependency,
244
257
  new CssIcssImportDependency.Template()
245
258
  );
259
+ compilation.dependencyFactories.set(
260
+ CssIcssFromIdentifierDependency,
261
+ normalModuleFactory
262
+ );
263
+ compilation.dependencyTemplates.set(
264
+ CssIcssFromIdentifierDependency,
265
+ new CssIcssFromIdentifierDependency.Template()
266
+ );
267
+ compilation.dependencyFactories.set(
268
+ CssIcssGlobalIdentifierDependency,
269
+ normalModuleFactory
270
+ );
271
+ compilation.dependencyTemplates.set(
272
+ CssIcssGlobalIdentifierDependency,
273
+ new CssIcssGlobalIdentifierDependency.Template()
274
+ );
246
275
  compilation.dependencyTemplates.set(
247
276
  CssIcssExportDependency,
248
277
  new CssIcssExportDependency.Template()
@@ -265,35 +294,44 @@ class CssModulesPlugin {
265
294
  .for(type)
266
295
  .tap(PLUGIN_NAME, (parserOptions) => {
267
296
  validateParserOptions[type](parserOptions);
268
- const { url, import: importOption, namedExports } = parserOptions;
297
+ const {
298
+ url,
299
+ import: importOption,
300
+ namedExports,
301
+ exportType
302
+ } = parserOptions;
269
303
 
270
304
  switch (type) {
271
305
  case CSS_MODULE_TYPE:
272
306
  return new CssParser({
273
307
  importOption,
274
308
  url,
275
- namedExports
309
+ namedExports,
310
+ exportType
276
311
  });
277
312
  case CSS_MODULE_TYPE_GLOBAL:
278
313
  return new CssParser({
279
314
  defaultMode: "global",
280
315
  importOption,
281
316
  url,
282
- namedExports
317
+ namedExports,
318
+ exportType
283
319
  });
284
320
  case CSS_MODULE_TYPE_MODULE:
285
321
  return new CssParser({
286
322
  defaultMode: "local",
287
323
  importOption,
288
324
  url,
289
- namedExports
325
+ namedExports,
326
+ exportType
290
327
  });
291
328
  case CSS_MODULE_TYPE_AUTO:
292
329
  return new CssParser({
293
330
  defaultMode: "auto",
294
331
  importOption,
295
332
  url,
296
- namedExports
333
+ namedExports,
334
+ exportType
297
335
  });
298
336
  }
299
337
  });
@@ -545,8 +583,6 @@ class CssModulesPlugin {
545
583
  onceForChunkSet.add(chunk);
546
584
  if (!isEnabledForChunk(chunk)) return;
547
585
 
548
- set.add(RuntimeGlobals.makeNamespaceObject);
549
-
550
586
  const CssLoadingRuntimeModule = getCssLoadingRuntimeModule();
551
587
  compilation.addRuntimeModule(chunk, new CssLoadingRuntimeModule(set));
552
588
  };
@@ -593,6 +629,15 @@ class CssModulesPlugin {
593
629
  set.add(RuntimeGlobals.publicPath);
594
630
  set.add(RuntimeGlobals.getChunkCssFilename);
595
631
  });
632
+
633
+ compilation.hooks.runtimeRequirementInTree
634
+ .for(RuntimeGlobals.cssMergeStyleSheets)
635
+ .tap(PLUGIN_NAME, (chunk) => {
636
+ compilation.addRuntimeModule(
637
+ chunk,
638
+ new CssMergeStyleSheetsRuntimeModule()
639
+ );
640
+ });
596
641
  }
597
642
  );
598
643
  }
@@ -758,18 +803,11 @@ class CssModulesPlugin {
758
803
  * @param {CssModule} module css module
759
804
  * @param {ChunkRenderContext} renderContext options object
760
805
  * @param {CompilationHooks} hooks hooks
761
- * @returns {Source} css module source
806
+ * @returns {Source | null} css module source
762
807
  */
763
- renderModule(module, renderContext, hooks) {
764
- const { codeGenerationResults, chunk, undoPath } = renderContext;
765
- const codeGenResult = codeGenerationResults.get(module, chunk.runtime);
766
- const moduleSourceContent =
767
- /** @type {Source} */
768
- (
769
- codeGenResult.sources.get("css") ||
770
- codeGenResult.sources.get("css-import")
771
- );
772
- const cacheEntry = this._moduleFactoryCache.get(moduleSourceContent);
808
+ static renderModule(module, renderContext, hooks) {
809
+ const { undoPath, moduleFactoryCache, moduleSourceContent } = renderContext;
810
+ const cacheEntry = moduleFactoryCache.get(moduleSourceContent);
773
811
 
774
812
  /** @type {Inheritance} */
775
813
  const inheritance = [[module.cssLayer, module.supports, module.media]];
@@ -791,6 +829,7 @@ class CssModulesPlugin {
791
829
  ) {
792
830
  source = cacheEntry.source;
793
831
  } else {
832
+ if (!moduleSourceContent) return null;
794
833
  const moduleSourceCode =
795
834
  /** @type {string} */
796
835
  (moduleSourceContent.source());
@@ -845,7 +884,7 @@ class CssModulesPlugin {
845
884
  }
846
885
 
847
886
  source = new CachedSource(moduleSource);
848
- this._moduleFactoryCache.set(moduleSourceContent, {
887
+ moduleFactoryCache.set(moduleSourceContent, {
849
888
  inheritance,
850
889
  undoPath,
851
890
  source
@@ -867,28 +906,39 @@ class CssModulesPlugin {
867
906
  {
868
907
  undoPath,
869
908
  chunk,
870
- chunkGraph,
871
909
  codeGenerationResults,
872
910
  modules,
873
- runtimeTemplate
911
+ runtimeTemplate,
912
+ chunkGraph
874
913
  },
875
914
  hooks
876
915
  ) {
877
916
  const source = new ConcatSource();
878
917
  for (const module of modules) {
879
918
  try {
880
- const moduleSource = this.renderModule(
919
+ const codeGenResult = codeGenerationResults.get(module, chunk.runtime);
920
+ const moduleSourceContent =
921
+ /** @type {Source} */
922
+ (
923
+ codeGenResult.sources.get("css") ||
924
+ codeGenResult.sources.get("css-import")
925
+ );
926
+ const moduleSource = CssModulesPlugin.renderModule(
881
927
  module,
882
928
  {
883
929
  undoPath,
884
930
  chunk,
885
931
  chunkGraph,
886
932
  codeGenerationResults,
933
+ moduleSourceContent,
934
+ moduleFactoryCache: this._moduleFactoryCache,
887
935
  runtimeTemplate
888
936
  },
889
937
  hooks
890
938
  );
891
- source.add(moduleSource);
939
+ if (moduleSource) {
940
+ source.add(moduleSource);
941
+ }
892
942
  } catch (err) {
893
943
  /** @type {Error} */
894
944
  (err).message += `\nduring rendering of css ${module.identifier()}`;