webpack 5.110.2 → 5.111.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 (226) hide show
  1. package/README.md +5 -2
  2. package/lib/APIPlugin.js +23 -7
  3. package/lib/AutomaticPrefetchPlugin.js +1 -1
  4. package/lib/Cache.js +8 -3
  5. package/lib/CacheFacade.js +1 -1
  6. package/lib/ChunkGraph.js +20 -18
  7. package/lib/CircularModulesPlugin.js +157 -55
  8. package/lib/CleanPlugin.js +2 -2
  9. package/lib/Compilation.js +321 -303
  10. package/lib/Compiler.js +209 -46
  11. package/lib/ConcatenationScope.js +25 -35
  12. package/lib/ContextModule.js +17 -81
  13. package/lib/ContextModuleFactory.js +1 -1
  14. package/lib/CopyPlugin.js +1054 -0
  15. package/lib/DefinePlugin.js +24 -8
  16. package/lib/DotenvPlugin.js +41 -13
  17. package/lib/ExternalModule.js +41 -14
  18. package/lib/FileSystemInfo.js +17 -14
  19. package/lib/FlagDependencyExportsPlugin.js +45 -21
  20. package/lib/FlagDependencyUsagePlugin.js +8 -2
  21. package/lib/HotModuleReplacementPlugin.js +53 -7
  22. package/lib/JavascriptMetaInfoPlugin.js +5 -3
  23. package/lib/MainTemplate.js +5 -1
  24. package/lib/Module.js +16 -7
  25. package/lib/MultiCompiler.js +1 -1
  26. package/lib/MultiWatching.js +1 -1
  27. package/lib/NormalModule.js +58 -32
  28. package/lib/NormalModuleFactory.js +1 -1
  29. package/lib/RuntimeGlobals.js +21 -7
  30. package/lib/RuntimeModule.js +28 -12
  31. package/lib/RuntimePlugin.js +33 -3
  32. package/lib/RuntimeTemplate.js +794 -477
  33. package/lib/SourceMapDevToolPlugin.js +1 -1
  34. package/lib/Watching.js +9 -0
  35. package/lib/WebpackOptionsApply.js +84 -91
  36. package/lib/asset/AssetGenerator.js +25 -8
  37. package/lib/asset/AssetModule.js +3 -0
  38. package/lib/asset/WebManifestParser.js +7 -5
  39. package/lib/async-modules/AsyncModuleHelpers.js +10 -4
  40. package/lib/cache/AddBuildDependenciesPlugin.js +33 -4
  41. package/lib/cache/IdleFileCachePlugin.js +2 -2
  42. package/lib/cache/PackFileCacheStrategy.js +14 -1
  43. package/lib/config/browserslistTargetHandler.js +19 -0
  44. package/lib/config/defaults.js +110 -64
  45. package/lib/config/normalization.js +100 -20
  46. package/lib/config/target.js +10 -0
  47. package/lib/container/ContainerReferencePlugin.js +6 -0
  48. package/lib/container/RemoteRuntimeModule.js +9 -0
  49. package/lib/container/declaredRemotes.js +39 -0
  50. package/lib/css/CssGenerator.js +8 -0
  51. package/lib/css/CssInjectStyleRuntimeModule.js +9 -0
  52. package/lib/css/CssLoadingRuntimeModule.js +94 -36
  53. package/lib/css/CssModule.js +1 -1
  54. package/lib/css/CssModulesPlugin.js +7 -6
  55. package/lib/css/CssParser.js +144 -11
  56. package/lib/css/CssServerStylesRuntimeModule.js +9 -0
  57. package/lib/css/cssMinify.js +11 -3
  58. package/lib/css/data.js +2814 -678
  59. package/lib/css/syntax.js +4082 -248
  60. package/lib/debug/ProfilingPlugin.js +4 -0
  61. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +6 -3
  62. package/lib/dependencies/AMDRuntimeModules.js +18 -0
  63. package/lib/dependencies/CommonJsExportRequireDependency.js +3 -1
  64. package/lib/dependencies/CommonJsExportsParserPlugin.js +12 -13
  65. package/lib/dependencies/CommonJsImportsParserPlugin.js +1 -0
  66. package/lib/dependencies/CommonJsPlugin.js +19 -3
  67. package/lib/dependencies/CommonJsRequireDependency.js +32 -9
  68. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +20 -7
  69. package/lib/dependencies/CssIcssExportDependency.js +7 -1
  70. package/lib/dependencies/HarmonyCompatibilityDependency.js +58 -4
  71. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +8 -3
  72. package/lib/dependencies/HarmonyExportExpressionDependency.js +44 -29
  73. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +171 -32
  74. package/lib/dependencies/HarmonyExportInitFragment.js +99 -19
  75. package/lib/dependencies/HarmonyExportSpecifierDependency.js +18 -30
  76. package/lib/dependencies/HarmonyImportBareSideEffectDependency.js +59 -0
  77. package/lib/dependencies/HarmonyImportDependency.js +99 -41
  78. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +20 -3
  79. package/lib/dependencies/HarmonyImportSpecifierDependency.js +24 -1
  80. package/lib/dependencies/HarmonyModulesPlugin.js +20 -0
  81. package/lib/dependencies/HtmlEntryDependency.js +62 -2
  82. package/lib/dependencies/ImportContextDependency.js +43 -3
  83. package/lib/dependencies/ImportDependency.js +8 -29
  84. package/lib/dependencies/ImportMetaMainDependency.js +104 -0
  85. package/lib/dependencies/ImportMetaPlugin.js +59 -15
  86. package/lib/dependencies/ImportParserPlugin.js +24 -14
  87. package/lib/dependencies/RequireHeaderDependency.js +20 -21
  88. package/lib/dependencies/SystemRuntimeModule.js +9 -0
  89. package/lib/dependencies/WorkerDependency.js +1 -2
  90. package/lib/dependencies/WorkletDependency.js +1 -2
  91. package/lib/dependencies/importOptionsCheck.js +47 -0
  92. package/lib/dll/DelegatedModule.js +18 -1
  93. package/lib/dll/DllReferencePlugin.js +11 -8
  94. package/lib/dll/LibManifestPlugin.js +1 -1
  95. package/lib/errors/AnalyzableBailoutsWarning.js +41 -0
  96. package/lib/errors/DotenvFileError.js +29 -0
  97. package/lib/errors/DuplicateModulesWarning.js +12 -7
  98. package/lib/errors/EmptyCopyPatternWarning.js +26 -0
  99. package/lib/errors/ExternalStarReexportError.js +44 -0
  100. package/lib/errors/ImportedBindingAssignmentError.js +30 -0
  101. package/lib/errors/MissingSourceMapsWarning.js +36 -0
  102. package/lib/errors/ModuleParseError.js +2 -1
  103. package/lib/errors/UnusedAssetsWarning.js +36 -0
  104. package/lib/errors/UnusedFederationWarning.js +35 -0
  105. package/lib/errors/UnusedModulesWarning.js +38 -0
  106. package/lib/esm/ExportWebpackRequireRuntimeModule.js +9 -0
  107. package/lib/esm/ModuleChunkFormatPlugin.js +28 -3
  108. package/lib/esm/ModuleChunkLoadingPlugin.js +30 -11
  109. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +92 -60
  110. package/lib/hmr/HotModuleReplacement.runtime.js +8 -2
  111. package/lib/hmr/HotModuleReplacementRuntimeModule.js +9 -0
  112. package/lib/html/HtmlGenerator.js +11 -5
  113. package/lib/html/HtmlModulesPlugin.js +360 -84
  114. package/lib/html/HtmlParser.js +13 -6
  115. package/lib/html/builtinEmbeddedRenderer.js +107 -0
  116. package/lib/html/data.js +121 -7
  117. package/lib/html/htmlMinify.js +84 -113
  118. package/lib/html/syntax.js +1067 -569
  119. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  120. package/lib/index.js +3 -0
  121. package/lib/javascript/JavascriptModule.js +1 -0
  122. package/lib/javascript/JavascriptModulesPlugin.js +52 -22
  123. package/lib/javascript/JavascriptParser.js +1255 -728
  124. package/lib/javascript/StartupHelpers.js +27 -3
  125. package/lib/javascript/data.js +172 -0
  126. package/lib/javascript/grammar.js +5546 -0
  127. package/lib/javascript/parser.js +1494 -0
  128. package/lib/javascript/regexp.js +1762 -0
  129. package/lib/javascript/regexpData.js +51 -0
  130. package/lib/javascript/syntax.js +8696 -5225
  131. package/lib/library/ModuleLibraryPlugin.js +116 -5
  132. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -0
  133. package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -0
  134. package/lib/optimize/ConcatenatedModule.js +133 -25
  135. package/lib/optimize/ConstExportsPlugin.js +50 -39
  136. package/lib/optimize/InlineExports.js +20 -123
  137. package/lib/optimize/MangleExportsPlugin.js +10 -0
  138. package/lib/optimize/ModuleConcatenationPlugin.js +24 -1
  139. package/lib/optimize/RealContentHashPlugin.js +68 -9
  140. package/lib/optimize/SideEffectsFlagPlugin.js +17 -9
  141. package/lib/performance/AnalyzableBailoutsPlugin.js +115 -0
  142. package/lib/performance/CacheEffectivenessPlugin.js +4 -3
  143. package/lib/performance/DuplicateModulesPlugin.js +57 -13
  144. package/lib/performance/EvalUsagePlugin.js +5 -2
  145. package/lib/performance/MissingSourceMapsPlugin.js +115 -0
  146. package/lib/performance/PureAnnotationsPlugin.js +6 -3
  147. package/lib/performance/TopLevelThisPlugin.js +5 -4
  148. package/lib/performance/UnusedAssetsPlugin.js +109 -0
  149. package/lib/performance/UnusedFederationPlugin.js +147 -0
  150. package/lib/performance/UnusedModulesPlugin.js +141 -0
  151. package/lib/performance/UnusedReexportsPlugin.js +1 -55
  152. package/lib/performance/isOnlyReexported.js +65 -0
  153. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +25 -5
  154. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +2 -0
  155. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +9 -0
  156. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +9 -0
  157. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +9 -0
  158. package/lib/prefetch/ResourceHintPlugin.js +7 -3
  159. package/lib/prefetch/ResourceHintRuntimeModule.js +9 -0
  160. package/lib/prefetch/StartupAssetHintRuntimeModule.js +9 -0
  161. package/lib/rules/RuleSetCompiler.js +211 -4
  162. package/lib/runtime/AsyncModuleRuntimeModule.js +105 -67
  163. package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -0
  164. package/lib/runtime/BaseUriRuntimeModule.js +9 -0
  165. package/lib/runtime/ChunkNameRuntimeModule.js +9 -0
  166. package/lib/runtime/EnsureChunkRuntimeModule.js +35 -16
  167. package/lib/runtime/GetChunkFilenameRuntimeModule.js +9 -0
  168. package/lib/runtime/GetFullHashRuntimeModule.js +9 -0
  169. package/lib/runtime/GetMainFilenameRuntimeModule.js +9 -0
  170. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +9 -0
  171. package/lib/runtime/GlobalRuntimeModule.js +9 -0
  172. package/lib/runtime/HasOwnPropertyRuntimeModule.js +9 -0
  173. package/lib/runtime/HelperRuntimeModule.js +10 -0
  174. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +338 -217
  175. package/lib/runtime/NonceRuntimeModule.js +9 -0
  176. package/lib/runtime/OnChunksLoadedRuntimeModule.js +67 -20
  177. package/lib/runtime/PublicPathRuntimeModule.js +9 -0
  178. package/lib/runtime/RuntimeIdRuntimeModule.js +9 -0
  179. package/lib/runtime/SpecNamespaceObjectRuntimeModule.js +90 -0
  180. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +9 -0
  181. package/lib/runtime/StartupEntrypointRuntimeModule.js +9 -0
  182. package/lib/runtime/SystemContextRuntimeModule.js +9 -0
  183. package/lib/runtime/ToBinaryRuntimeModule.js +9 -0
  184. package/lib/schemes/HttpUriPlugin.js +22 -5
  185. package/lib/serialization/FileMiddleware.js +15 -2
  186. package/lib/serialization/ObjectMiddleware.js +138 -106
  187. package/lib/sharing/ConsumeSharedPlugin.js +12 -0
  188. package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -0
  189. package/lib/sharing/ShareRuntimeModule.js +9 -0
  190. package/lib/sharing/declaredShared.js +47 -0
  191. package/lib/stats/DefaultStatsFactoryPlugin.js +3 -1
  192. package/lib/stats/DefaultStatsPrinterPlugin.js +3 -0
  193. package/lib/util/ArrayQueue.js +3 -3
  194. package/lib/util/SourceProcessor.js +76 -69
  195. package/lib/util/URLAbsoluteSpecifier.js +3 -1
  196. package/lib/util/async.js +292 -0
  197. package/lib/util/buildDiagnostics.js +69 -0
  198. package/lib/util/conventions.js +5 -1
  199. package/lib/util/fs.js +27 -1
  200. package/lib/util/handlerKeys.js +40 -0
  201. package/lib/util/identifier.js +20 -0
  202. package/lib/util/internalSerializables.js +6 -0
  203. package/lib/util/registerExternalSerializer.js +6 -45
  204. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +9 -0
  205. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -0
  206. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +9 -0
  207. package/lib/web/JsonpChunkLoadingRuntimeModule.js +36 -0
  208. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +19 -0
  209. package/package.json +22 -16
  210. package/schemas/WebpackOptions.check.js +1 -1
  211. package/schemas/WebpackOptions.json +388 -76
  212. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
  213. package/schemas/plugins/ManifestPlugin.check.js +1 -1
  214. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  215. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  216. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  217. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  218. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  219. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
  220. package/schemas/plugins/dll/DllReferencePlugin.check.js +1 -1
  221. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +1 -1
  222. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  223. package/types.d.ts +1440 -331
  224. package/lib/dependencies/ExportBindingInitFragment.js +0 -191
  225. package/lib/errors/EntrypointOverlapWarning.js +0 -45
  226. package/lib/performance/EntrypointOverlapPlugin.js +0 -122
@@ -10,6 +10,7 @@ const {
10
10
  compareModulesByPreOrderIndexOrIdentifier
11
11
  } = require("../util/comparators");
12
12
  const createHash = require("../util/createHash");
13
+ const { fileUrlToPath } = require("../util/identifier");
13
14
  const {
14
15
  getFullModuleName,
15
16
  getUsedModuleIdsAndModules
@@ -58,7 +59,7 @@ class HashedModuleIdsPlugin {
58
59
  compilation.hooks.moduleIds.tap(PLUGIN_NAME, () => {
59
60
  const chunkGraph = compilation.chunkGraph;
60
61
  const context = this.options.context
61
- ? this.options.context
62
+ ? fileUrlToPath(this.options.context)
62
63
  : compiler.context;
63
64
 
64
65
  const [usedIds, modules] = getUsedModuleIdsAndModules(compilation);
package/lib/index.js CHANGED
@@ -242,6 +242,9 @@ module.exports = mergeExports(fn, {
242
242
  get ContextReplacementPlugin() {
243
243
  return require("./ContextReplacementPlugin");
244
244
  },
245
+ get CopyPlugin() {
246
+ return require("./CopyPlugin");
247
+ },
245
248
  get DefinePlugin() {
246
249
  return require("./DefinePlugin");
247
250
  },
@@ -19,6 +19,7 @@ const makeSerializable = require("../util/makeSerializable");
19
19
  * Defines the build info properties specific to javascript modules.
20
20
  * @typedef {object} KnownJavascriptModuleBuildInfo
21
21
  * @property {string=} moduleConcatenationBailout using in CommonJs
22
+ * @property {string=} moduleConcatenationRootBailout what rules the module out as a concatenation root, while it may still be an inner module
22
23
  * @property {boolean=} needCreateRequire using in APIPlugin
23
24
  * @property {boolean=} usingPublicPathOverride module reassigns `__webpack_public_path__` at runtime, using in APIPlugin
24
25
  * @property {Set<string>=} pureFunctions names of locally declared functions known to be free of side effects
@@ -57,27 +57,12 @@ const JavascriptGenerator = require("./JavascriptGenerator");
57
57
  const JavascriptModule = require("./JavascriptModule");
58
58
  const JavascriptParser = require("./JavascriptParser");
59
59
  const analyzeScope = require("./ScopeAnalyzer");
60
+ const { renderAwaitedEntries } = require("./StartupHelpers");
61
+ const { releaseParserCaches } = require("./syntax");
60
62
 
61
63
  /**
62
64
  * @import {
63
- * Program,
64
- * Node,
65
- * Identifier,
66
- * CatchClause,
67
- * ClassDeclaration,
68
- * ClassExpression,
69
- * FunctionDeclaration,
70
- * FunctionExpression,
71
- * ArrowFunctionExpression,
72
- * VariableDeclarator,
73
- * VariableDeclaration,
74
- * ImportDeclaration,
75
- * ImportSpecifier,
76
- * ImportDefaultSpecifier,
77
- * ImportNamespaceSpecifier,
78
- * AssignmentExpression,
79
- * ForInStatement,
80
- * ForOfStatement
65
+ * Program
81
66
  * } from "estree"
82
67
  */
83
68
  /** @import { Source } from "webpack-sources" */
@@ -470,6 +455,10 @@ class JavascriptModulesPlugin {
470
455
  * @returns {void}
471
456
  */
472
457
  apply(compiler) {
458
+ // the parser's shared string caches only pay off while modules parse —
459
+ // drop them when the build ends so an idle process retains no parser state
460
+ compiler.hooks.done.tap(PLUGIN_NAME, releaseParserCaches);
461
+ compiler.hooks.failed.tap(PLUGIN_NAME, releaseParserCaches);
473
462
  compiler.hooks.compilation.tap(
474
463
  PLUGIN_NAME,
475
464
  (compilation, { normalModuleFactory }) => {
@@ -1680,6 +1669,27 @@ class JavascriptModulesPlugin {
1680
1669
  continue;
1681
1670
  }
1682
1671
  }
1672
+ const entryOptions = chunk.getEntryOptions();
1673
+ const library =
1674
+ entryOptions && entryOptions.library !== undefined
1675
+ ? entryOptions.library
1676
+ : runtimeTemplate.outputOptions.library;
1677
+ // A module library awaits the entry itself, in `ModuleLibraryPlugin`.
1678
+ const awaitedByLibrary =
1679
+ library !== undefined && library.type === "module";
1680
+ // `await` is legal only at an ESM chunk's top level, never in the
1681
+ // startup function below, and only where the target parses it.
1682
+ const canAwaitEntry =
1683
+ runtimeTemplate.isModule() &&
1684
+ runtimeTemplate.supportsTopLevelAwait() &&
1685
+ !awaitedByLibrary &&
1686
+ !runtimeRequirements.has(RuntimeGlobals.startup) &&
1687
+ !(
1688
+ runtimeRequirements.has(RuntimeGlobals.startupOnlyBefore) &&
1689
+ runtimeRequirements.has(RuntimeGlobals.startupOnlyAfter)
1690
+ );
1691
+ /** @type {string[]} */
1692
+ const awaitedEntries = [];
1683
1693
  let i = jsEntries.length;
1684
1694
  for (const [entryModule, entrypoint] of jsEntries) {
1685
1695
  const chunks =
@@ -1796,21 +1806,40 @@ class JavascriptModulesPlugin {
1796
1806
  // reassignment is allowed.
1797
1807
  const exportsDecl = runtimeTemplate.renderLet();
1798
1808
  if (chunks.length > 0) {
1809
+ const awaitEntry =
1810
+ canAwaitEntry && moduleGraph.isAsync(entryModule);
1811
+ const target =
1812
+ i === 0
1813
+ ? RuntimeGlobals.exports
1814
+ : `${RuntimeGlobals.exports}_${i}`;
1815
+ // The wrapper hands back nothing until the flush below runs the
1816
+ // entry, so an awaited one is caught by the entry call itself.
1817
+ if (awaitEntry && i !== 0) buf2.push(`${exportsDecl} ${target};`);
1818
+ const entryCall = `${RuntimeGlobals.require}(${moduleIdExpr})`;
1799
1819
  buf2.push(
1800
1820
  `${i === 0 ? `${exportsDecl} ${RuntimeGlobals.exports} = ` : ""}${
1801
1821
  RuntimeGlobals.onChunksLoaded
1802
1822
  }(undefined, ${JSON.stringify(
1803
1823
  chunks.map((c) => c.id)
1804
1824
  )}, ${runtimeTemplate.returningFunction(
1805
- `${RuntimeGlobals.require}(${moduleIdExpr})`
1825
+ awaitEntry ? `(${target} = ${entryCall})` : entryCall
1806
1826
  )})`
1807
1827
  );
1828
+ if (awaitEntry) awaitedEntries.push(target);
1808
1829
  } else if (useRequire) {
1830
+ // An async entry nobody awaits settles after the bundle did,
1831
+ // which orphans its rejection.
1832
+ const awaitEntry =
1833
+ canAwaitEntry && moduleGraph.isAsync(entryModule);
1834
+ const target =
1835
+ i === 0
1836
+ ? RuntimeGlobals.exports
1837
+ : `${RuntimeGlobals.exports}_${i}`;
1838
+ const needsDecl = i === 0 || awaitEntry;
1809
1839
  buf2.push(
1810
- `${i === 0 ? `${exportsDecl} ${RuntimeGlobals.exports} = ` : ""}${
1811
- RuntimeGlobals.require
1812
- }(${moduleIdExpr});`
1840
+ `${needsDecl ? `${exportsDecl} ${target} = ` : ""}${RuntimeGlobals.require}(${moduleIdExpr});`
1813
1841
  );
1842
+ if (awaitEntry) awaitedEntries.push(target);
1814
1843
  } else {
1815
1844
  if (i === 0) {
1816
1845
  buf2.push(`${exportsDecl} ${RuntimeGlobals.exports} = {};`);
@@ -1853,6 +1882,7 @@ class JavascriptModulesPlugin {
1853
1882
  `${RuntimeGlobals.exports} = ${RuntimeGlobals.onChunksLoaded}(${RuntimeGlobals.exports});`
1854
1883
  );
1855
1884
  }
1885
+ buf2.push(...renderAwaitedEntries(awaitedEntries));
1856
1886
  if (
1857
1887
  runtimeRequirements.has(RuntimeGlobals.startup) ||
1858
1888
  (runtimeRequirements.has(RuntimeGlobals.startupOnlyBefore) &&