webpack 5.108.4 → 5.109.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.
- package/lib/APIPlugin.js +48 -29
- package/lib/CacheFacade.js +8 -0
- package/lib/ChunkGroup.js +1 -0
- package/lib/CompatibilityPlugin.js +31 -29
- package/lib/Compilation.js +49 -4
- package/lib/ConstPlugin.js +11 -11
- package/lib/ContextModule.js +239 -6
- package/lib/ContextModuleFactory.js +139 -14
- package/lib/DefinePlugin.js +396 -101
- package/lib/Entrypoint.js +1 -1
- package/lib/ExportsInfoApiPlugin.js +2 -2
- package/lib/ExternalModule.js +107 -5
- package/lib/ExternalModuleFactoryPlugin.js +20 -1
- package/lib/FileSystemInfo.js +130 -74
- package/lib/HotModuleReplacementPlugin.js +18 -15
- package/lib/Module.js +3 -0
- package/lib/ModuleFilenameHelpers.js +2 -2
- package/lib/ModuleTypeConstants.js +8 -1
- package/lib/MultiCompiler.js +13 -2
- package/lib/MultiWatching.js +1 -0
- package/lib/NodeStuffPlugin.js +51 -33
- package/lib/NormalModule.js +169 -401
- package/lib/NormalModuleFactory.js +76 -2
- package/lib/ProgressPlugin.js +211 -119
- package/lib/ProvidePlugin.js +2 -2
- package/lib/RuntimeGlobals.js +47 -0
- package/lib/RuntimePlugin.js +33 -0
- package/lib/RuntimeTemplate.js +304 -16
- package/lib/UseStrictPlugin.js +1 -1
- package/lib/WebpackIsIncludedPlugin.js +1 -1
- package/lib/WebpackOptionsApply.js +24 -19
- package/lib/asset/AssetGenerator.js +110 -28
- package/lib/asset/AssetModulesPlugin.js +92 -2
- package/lib/asset/WebManifestGenerator.js +164 -0
- package/lib/asset/WebManifestParser.js +130 -0
- package/lib/async-modules/AwaitDependenciesInitFragment.js +14 -4
- package/lib/async-modules/isGeneratorLowered.js +26 -0
- package/lib/cache/PackFileCacheStrategy.js +9 -3
- package/lib/config/browserslistTargetHandler.js +40 -0
- package/lib/config/defaults.js +219 -29
- package/lib/config/normalization.js +26 -0
- package/lib/config/target.js +9 -1
- package/lib/css/CssGenerator.js +40 -31
- package/lib/css/CssLoadingRuntimeModule.js +5 -1
- package/lib/css/CssModulesPlugin.js +13 -0
- package/lib/css/CssParser.js +594 -263
- package/lib/css/syntax.js +875 -462
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +6 -6
- package/lib/dependencies/AMDPlugin.js +2 -2
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +13 -13
- package/lib/dependencies/CommonJsDependencyHelpers.js +39 -0
- package/lib/dependencies/CommonJsExportsDependency.js +47 -2
- package/lib/dependencies/CommonJsExportsParserPlugin.js +10 -10
- package/lib/dependencies/CommonJsImportsParserPlugin.js +18 -18
- package/lib/dependencies/CommonJsPlugin.js +2 -2
- package/lib/dependencies/CommonJsRequireDependency.js +26 -1
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +32 -1
- package/lib/dependencies/ContextDependencyHelpers.js +3 -3
- package/lib/dependencies/CreateRequireParserPlugin.js +6 -6
- package/lib/dependencies/CssIcssExportDependency.js +162 -71
- package/lib/dependencies/CssUrlDependency.js +35 -4
- package/lib/dependencies/ExternalModuleInitFragmentDependency.js +2 -2
- package/lib/dependencies/HarmonyCompatibilityDependency.js +32 -14
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +43 -13
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +7 -19
- package/lib/dependencies/HarmonyImportDependency.js +12 -1
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +11 -11
- package/lib/dependencies/HarmonyModulesPlugin.js +6 -0
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -1
- package/lib/dependencies/HtmlEntryDependency.js +797 -172
- package/lib/dependencies/HtmlSourceDependency.js +26 -0
- package/lib/dependencies/ImportDependency.js +43 -1
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +31 -18
- package/lib/dependencies/ImportMetaContextPlugin.js +38 -7
- package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
- package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
- package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
- package/lib/dependencies/ImportMetaPlugin.js +532 -180
- package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
- package/lib/dependencies/ImportParserPlugin.js +80 -17
- package/lib/dependencies/ImportPhase.js +10 -8
- package/lib/dependencies/LoaderPlugin.js +5 -1
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -1
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +3 -6
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +4 -11
- package/lib/dependencies/SystemPlugin.js +2 -4
- package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
- package/lib/dependencies/URLDependency.js +141 -21
- package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +324 -112
- package/lib/dependencies/WorkerDependency.js +86 -18
- package/lib/dependencies/WorkletDependency.js +278 -0
- package/lib/dll/DelegatedModuleFactoryPlugin.js +19 -0
- package/lib/errors/EnvironmentNotSupportAsyncWarning.js +1 -1
- package/lib/errors/LoaderLoadingError.js +20 -0
- package/lib/errors/ModuleParseError.js +39 -22
- package/lib/errors/NodeStuffInWebError.js +1 -1
- package/lib/esm/ModuleChunkFormatPlugin.js +47 -14
- package/lib/esm/ModuleChunkLoadingPlugin.js +8 -1
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +29 -1
- package/lib/hmr/lazyCompilationBackend.js +32 -8
- package/lib/html/HtmlGenerator.js +887 -15
- package/lib/html/HtmlModule.js +2 -2
- package/lib/html/HtmlModulesPlugin.js +610 -166
- package/lib/html/HtmlParser.js +603 -247
- package/lib/html/favicon.svg +1 -0
- package/lib/html/syntax.js +1264 -661
- package/lib/ids/IdHelpers.js +1 -1
- package/lib/index.js +6 -0
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +4 -5
- package/lib/javascript/BasicEvaluatedExpression.js +366 -48
- package/lib/javascript/JavascriptGenerator.js +197 -49
- package/lib/javascript/JavascriptModulesPlugin.js +178 -24
- package/lib/javascript/JavascriptParser.js +701 -355
- package/lib/javascript/JavascriptParserHelpers.js +3 -6
- package/lib/javascript/syntax.js +4380 -0
- package/lib/library/ModuleLibraryPlugin.js +38 -1
- package/lib/loaders/LoaderRunner.js +714 -0
- package/lib/loaders/loadLoader.js +100 -0
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +19 -0
- package/lib/node/ReadFileCompileWasmPlugin.js +14 -0
- package/lib/optimize/ConcatenatedModule.js +120 -16
- package/lib/optimize/FlagIncludedChunksPlugin.js +13 -3
- package/lib/optimize/InnerGraphPlugin.js +50 -30
- package/lib/optimize/ModuleConcatenationPlugin.js +69 -3
- package/lib/optimize/SideEffectsFlagPlugin.js +86 -43
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +15 -0
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +24 -13
- package/lib/prefetch/ResourceHintPlugin.js +663 -0
- package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
- package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
- package/lib/prefetch/parseResourceHintOptions.js +103 -0
- package/lib/rules/RuleSetCompiler.js +114 -0
- package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
- package/lib/runtime/AsyncModuleRuntimeModule.js +24 -8
- package/lib/runtime/AutoPublicPathRuntimeModule.js +7 -1
- package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
- package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +204 -8
- package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +4 -1
- package/lib/schemes/HttpUriPlugin.js +40 -1
- package/lib/schemes/VirtualUrlPlugin.js +1 -2
- package/lib/serialization/FileMiddleware.js +29 -3
- package/lib/stats/DefaultStatsFactoryPlugin.js +32 -3
- package/lib/stats/DefaultStatsPresetPlugin.js +2 -0
- package/lib/stats/DefaultStatsPrinterPlugin.js +12 -2
- package/lib/stats/StatsFactory.js +15 -8
- package/lib/url/URLParserPlugin.js +66 -13
- package/lib/util/AsyncQueue.js +122 -72
- package/lib/util/SetHelpers.js +1 -1
- package/lib/util/StackedMap.js +122 -48
- package/lib/util/binarySearchBounds.js +2 -2
- package/lib/util/concatenate.js +40 -14
- package/lib/util/createHooksRegistry.js +13 -5
- package/lib/util/dataURL.js +2 -2
- package/lib/util/deterministicGrouping.js +7 -5
- package/lib/util/formatSize.js +6 -2
- package/lib/util/globUtils.js +710 -0
- package/lib/util/identifier.js +23 -6
- package/lib/util/implicitTypeLoaderFallback.js +62 -0
- package/lib/util/internalSerializables.js +88 -71
- package/lib/util/magicComment.js +121 -25
- package/lib/util/numberHash.js +2 -2
- package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +24 -18
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +33 -22
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +79 -16
- package/lib/web/FetchCompileAsyncWasmPlugin.js +19 -0
- package/lib/web/FetchCompileWasmPlugin.js +14 -0
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +2 -0
- package/lib/webpack.js +65 -0
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +3 -0
- package/module.d.ts +21 -0
- package/package.json +13 -12
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +759 -36
- package/schemas/plugins/HtmlParserOptions.check.js +1 -1
- package/schemas/plugins/ProgressPlugin.check.js +1 -1
- package/schemas/plugins/ProgressPlugin.json +17 -1
- package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerReferencePlugin.json +1 -0
- package/schemas/plugins/container/ExternalsType.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +1 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
- package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
- package/schemas/plugins/css/CssParserOptions.check.js +1 -1
- package/types.d.ts +1213 -96
|
@@ -64,6 +64,9 @@ class ModuleChunkLoadingPlugin {
|
|
|
64
64
|
compilation.hooks.runtimeRequirementInTree
|
|
65
65
|
.for(RuntimeGlobals.externalInstallChunk)
|
|
66
66
|
.tap(PLUGIN_NAME, handler);
|
|
67
|
+
compilation.hooks.runtimeRequirementInTree
|
|
68
|
+
.for(RuntimeGlobals.analyzableChunkImport)
|
|
69
|
+
.tap(PLUGIN_NAME, handler);
|
|
67
70
|
compilation.hooks.runtimeRequirementInTree
|
|
68
71
|
.for(RuntimeGlobals.onChunksLoaded)
|
|
69
72
|
.tap(PLUGIN_NAME, handler);
|
|
@@ -83,12 +86,15 @@ class ModuleChunkLoadingPlugin {
|
|
|
83
86
|
);
|
|
84
87
|
});
|
|
85
88
|
|
|
86
|
-
//
|
|
89
|
+
// The prefetch/preload handlers build the chunk URL themselves, so they need
|
|
90
|
+
// the public path and script filename directly — without relying on
|
|
91
|
+
// `ensureChunkHandlers` to pull them in (an analyzable `import()` may replace it).
|
|
87
92
|
compilation.hooks.runtimeRequirementInTree
|
|
88
93
|
.for(RuntimeGlobals.prefetchChunkHandlers)
|
|
89
94
|
.tap(PLUGIN_NAME, (chunk, set) => {
|
|
90
95
|
if (!isEnabledForChunk(chunk)) return;
|
|
91
96
|
set.add(RuntimeGlobals.publicPath);
|
|
97
|
+
set.add(RuntimeGlobals.getChunkScriptFilename);
|
|
92
98
|
});
|
|
93
99
|
|
|
94
100
|
compilation.hooks.runtimeRequirementInTree
|
|
@@ -96,6 +102,7 @@ class ModuleChunkLoadingPlugin {
|
|
|
96
102
|
.tap(PLUGIN_NAME, (chunk, set) => {
|
|
97
103
|
if (!isEnabledForChunk(chunk)) return;
|
|
98
104
|
set.add(RuntimeGlobals.publicPath);
|
|
105
|
+
set.add(RuntimeGlobals.getChunkScriptFilename);
|
|
99
106
|
});
|
|
100
107
|
|
|
101
108
|
compilation.hooks.runtimeRequirementInTree
|
|
@@ -82,6 +82,9 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
|
|
|
82
82
|
const withExternalInstallChunk = this._runtimeRequirements.has(
|
|
83
83
|
RuntimeGlobals.externalInstallChunk
|
|
84
84
|
);
|
|
85
|
+
const withAnalyzableImport = this._runtimeRequirements.has(
|
|
86
|
+
RuntimeGlobals.analyzableChunkImport
|
|
87
|
+
);
|
|
85
88
|
const withLoading = this._runtimeRequirements.has(
|
|
86
89
|
RuntimeGlobals.ensureChunkHandlers
|
|
87
90
|
);
|
|
@@ -147,7 +150,7 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
|
|
|
147
150
|
: installedChunksObject
|
|
148
151
|
};`,
|
|
149
152
|
"",
|
|
150
|
-
withLoading || withExternalInstallChunk
|
|
153
|
+
withLoading || withExternalInstallChunk || withAnalyzableImport
|
|
151
154
|
? `${cst} installChunk = ${runtimeTemplate.basicFunction("data", [
|
|
152
155
|
runtimeTemplate.destructureObject(
|
|
153
156
|
[
|
|
@@ -333,6 +336,31 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
|
|
|
333
336
|
])
|
|
334
337
|
: "// no external install chunk",
|
|
335
338
|
"",
|
|
339
|
+
withAnalyzableImport
|
|
340
|
+
? `${
|
|
341
|
+
RuntimeGlobals.analyzableChunkImport
|
|
342
|
+
} = ${runtimeTemplate.basicFunction("chunkId, importFn", [
|
|
343
|
+
// A literal `import()` a foreign bundler can follow, wrapped to keep
|
|
344
|
+
// `ensureChunk` timing and deduplication: resolved chunk → resolve now, in-flight →
|
|
345
|
+
// reuse its promise, else run `importFn()` and install it.
|
|
346
|
+
`${lt} installedChunkData = ${RuntimeGlobals.hasOwnProperty}(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;`,
|
|
347
|
+
"if(installedChunkData === 0) return Promise.resolve();",
|
|
348
|
+
"if(installedChunkData) return installedChunkData[1];",
|
|
349
|
+
`${lt} promise = importFn().then(installChunk, ${runtimeTemplate.basicFunction(
|
|
350
|
+
"e",
|
|
351
|
+
[
|
|
352
|
+
"if(installedChunks[chunkId] !== 0) installedChunks[chunkId] = undefined;",
|
|
353
|
+
"throw e;"
|
|
354
|
+
]
|
|
355
|
+
)});`,
|
|
356
|
+
`promise = Promise.race([promise, new Promise(${runtimeTemplate.expressionFunction(
|
|
357
|
+
"installedChunkData = installedChunks[chunkId] = [resolve]",
|
|
358
|
+
"resolve"
|
|
359
|
+
)})]);`,
|
|
360
|
+
"return (installedChunkData[1] = promise);"
|
|
361
|
+
])};`
|
|
362
|
+
: "// no analyzable chunk import",
|
|
363
|
+
"",
|
|
336
364
|
withOnChunkLoad
|
|
337
365
|
? `${
|
|
338
366
|
RuntimeGlobals.onChunksLoaded
|
|
@@ -27,6 +27,9 @@ module.exports = (options) => (compiler, callback) => {
|
|
|
27
27
|
const logger = compiler.getInfrastructureLogger("LazyCompilationBackend");
|
|
28
28
|
/** @type {Map<string, number>} */
|
|
29
29
|
const activeModules = new Map();
|
|
30
|
+
/** @type {Set<NodeJS.Timeout>} */
|
|
31
|
+
const idleTimers = new Set();
|
|
32
|
+
let isClosing = false;
|
|
30
33
|
const prefix = "/lazy-compilation-using-";
|
|
31
34
|
|
|
32
35
|
const isHttps =
|
|
@@ -67,17 +70,29 @@ module.exports = (options) => (compiler, callback) => {
|
|
|
67
70
|
if (req.url === undefined) return;
|
|
68
71
|
const keys = req.url.slice(prefix.length).split("@");
|
|
69
72
|
req.socket.on("close", () => {
|
|
70
|
-
|
|
73
|
+
// Shutting down: skip the idle-decrement timer entirely.
|
|
74
|
+
if (isClosing) return;
|
|
75
|
+
const timer = setTimeout(() => {
|
|
76
|
+
idleTimers.delete(timer);
|
|
71
77
|
for (const key of keys) {
|
|
72
78
|
const oldValue = activeModules.get(key) || 0;
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
)
|
|
79
|
+
// Drop the entry at zero so the map doesn't retain idle modules
|
|
80
|
+
// and the count can't drift negative.
|
|
81
|
+
if (oldValue <= 1) {
|
|
82
|
+
activeModules.delete(key);
|
|
83
|
+
if (oldValue === 1) {
|
|
84
|
+
logger.log(
|
|
85
|
+
`${key} is no longer in use. Next compilation will skip this module.`
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
} else {
|
|
89
|
+
activeModules.set(key, oldValue - 1);
|
|
78
90
|
}
|
|
79
91
|
}
|
|
80
92
|
}, 120000);
|
|
93
|
+
// Don't keep the process alive just to decrement idle counters.
|
|
94
|
+
if (timer.unref) timer.unref();
|
|
95
|
+
idleTimers.add(timer);
|
|
81
96
|
});
|
|
82
97
|
req.socket.setNoDelay(true);
|
|
83
98
|
res.writeHead(200, {
|
|
@@ -102,7 +117,6 @@ module.exports = (options) => (compiler, callback) => {
|
|
|
102
117
|
const server = createServer();
|
|
103
118
|
server.on("request", requestListener);
|
|
104
119
|
|
|
105
|
-
let isClosing = false;
|
|
106
120
|
/** @type {Set<import("net").Socket>} */
|
|
107
121
|
const sockets = new Set();
|
|
108
122
|
server.on("connection", (socket) => {
|
|
@@ -113,7 +127,15 @@ module.exports = (options) => (compiler, callback) => {
|
|
|
113
127
|
if (isClosing) socket.destroy();
|
|
114
128
|
});
|
|
115
129
|
server.on("clientError", (e) => {
|
|
116
|
-
|
|
130
|
+
// A closing browser tab or a test tearing down aborts the request and
|
|
131
|
+
// resets the socket; that surfaces here as ECONNRESET and is benign.
|
|
132
|
+
if (
|
|
133
|
+
e.message === "Server is disposing" ||
|
|
134
|
+
/** @type {NodeJS.ErrnoException} */ (e).code === "ECONNRESET"
|
|
135
|
+
) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
logger.warn(e);
|
|
117
139
|
});
|
|
118
140
|
|
|
119
141
|
server.on(
|
|
@@ -142,6 +164,8 @@ module.exports = (options) => (compiler, callback) => {
|
|
|
142
164
|
callback(null, {
|
|
143
165
|
dispose(callback) {
|
|
144
166
|
isClosing = true;
|
|
167
|
+
for (const timer of idleTimers) clearTimeout(timer);
|
|
168
|
+
idleTimers.clear();
|
|
145
169
|
// Removing the listener is a workaround for a memory leak in node.js
|
|
146
170
|
server.off("request", requestListener);
|
|
147
171
|
server.close((err) => {
|