From 2cc85c64f1c64a2dbaeae276a3e2ca8420de76b7 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期三, 22 四月 2026 18:09:58 +0800
Subject: [PATCH] 上报转运调试

---
 node_modules/webpack/lib/WebpackOptionsApply.js |  163 +++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 111 insertions(+), 52 deletions(-)

diff --git a/node_modules/webpack/lib/WebpackOptionsApply.js b/node_modules/webpack/lib/WebpackOptionsApply.js
index 37a10ba..180d756 100644
--- a/node_modules/webpack/lib/WebpackOptionsApply.js
+++ b/node_modules/webpack/lib/WebpackOptionsApply.js
@@ -60,6 +60,7 @@
 const WorkerPlugin = require("./dependencies/WorkerPlugin");
 
 const JavascriptModulesPlugin = require("./javascript/JavascriptModulesPlugin");
+const JavascriptParser = require("./javascript/JavascriptParser");
 
 const JsonModulesPlugin = require("./json/JsonModulesPlugin");
 
@@ -74,8 +75,9 @@
 
 const { cleverMerge } = require("./util/cleverMerge");
 
-/** @typedef {import("../declarations/WebpackOptions").WebpackPluginFunction} WebpackPluginFunction */
+/** @typedef {import("./webpack").WebpackPluginFunction} WebpackPluginFunction */
 /** @typedef {import("./config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptions */
+/** @typedef {import("./config/normalization").WebpackOptionsInterception} WebpackOptionsInterception */
 /** @typedef {import("./Compiler")} Compiler */
 /** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
 /** @typedef {import("./util/fs").IntermediateFileSystem} IntermediateFileSystem */
@@ -88,11 +90,13 @@
 	}
 
 	/**
+	 * Returns options object.
 	 * @param {WebpackOptions} options options object
 	 * @param {Compiler} compiler compiler object
+	 * @param {WebpackOptionsInterception=} interception intercepted options
 	 * @returns {WebpackOptions} options object
 	 */
-	process(options, compiler) {
+	process(options, compiler, interception) {
 		compiler.outputPath = options.output.path;
 		compiler.recordsInputPath = options.recordsInputPath || null;
 		compiler.recordsOutputPath = options.recordsOutputPath || null;
@@ -111,13 +115,9 @@
 			const NodeTargetPlugin = require("./node/NodeTargetPlugin");
 
 			// Some older versions of Node.js don't support all built-in modules via import, only via `require`,
-			// but 褕t seems like there shouldn't be a warning here since these versions are rarely used in real applications
+			// but it seems like there shouldn't be a warning here since these versions are rarely used in real applications
 			new NodeTargetPlugin(
-				options.output.module &&
-				compiler.platform.node === null &&
-				compiler.platform.web === null
-					? "module-import"
-					: "node-commonjs"
+				options.output.module ? "module-import" : "node-commonjs"
 			).apply(compiler);
 
 			// Handle external CSS `@import` and `url()`
@@ -129,8 +129,8 @@
 					"module",
 					({ request, dependencyType, contextInfo }, callback) => {
 						if (
-							/\.css(\?|$)/.test(contextInfo.issuer) &&
-							/^(\/\/|https?:\/\/|#)/.test(request)
+							/\.css(?:\?|$)/.test(contextInfo.issuer) &&
+							/^(?:\/\/|https?:\/\/|#)/.test(request)
 						) {
 							if (dependencyType === "url") {
 								return callback(null, `asset ${request}`);
@@ -156,7 +156,7 @@
 			const ExternalsPlugin = require("./ExternalsPlugin");
 
 			new ExternalsPlugin(type, ({ request, dependencyType }, callback) => {
-				if (/^(\/\/|https?:\/\/|#|std:|jsr:|npm:)/.test(request)) {
+				if (/^(?:\/\/|https?:\/\/|#|std:|jsr:|npm:)/.test(request)) {
 					if (dependencyType === "url") {
 						return callback(null, `asset ${request}`);
 					} else if (
@@ -166,7 +166,7 @@
 						options.experiments.css
 					) {
 						return callback(null, `css-import ${request}`);
-					} else if (/^(\/\/|https?:\/\/|std:|jsr:|npm:)/.test(request)) {
+					} else if (/^(?:\/\/|https?:\/\/|std:|jsr:|npm:)/.test(request)) {
 						return callback(null, `${type} ${request}`);
 					}
 				}
@@ -315,43 +315,67 @@
 			).apply(compiler);
 		}
 
-		if (options.devtool) {
-			if (options.devtool.includes("source-map")) {
-				const hidden = options.devtool.includes("hidden");
-				const inline = options.devtool.includes("inline");
-				const evalWrapped = options.devtool.includes("eval");
-				const cheap = options.devtool.includes("cheap");
-				const moduleMaps = options.devtool.includes("module");
-				const noSources = options.devtool.includes("nosources");
-				const debugIds = options.devtool.includes("debugids");
-				const Plugin = evalWrapped
-					? require("./EvalSourceMapDevToolPlugin")
-					: require("./SourceMapDevToolPlugin");
-				new Plugin({
-					filename: inline ? null : options.output.sourceMapFilename,
-					moduleFilenameTemplate: options.output.devtoolModuleFilenameTemplate,
-					fallbackModuleFilenameTemplate:
-						options.output.devtoolFallbackModuleFilenameTemplate,
-					append: hidden ? false : undefined,
-					module: moduleMaps ? true : !cheap,
-					columns: !cheap,
-					noSources,
-					namespace: options.output.devtoolNamespace,
-					debugIds
-				}).apply(compiler);
-			} else if (options.devtool.includes("eval")) {
-				const EvalDevToolModulePlugin = require("./EvalDevToolModulePlugin");
+		let devtool =
+			interception === undefined ? options.devtool : interception.devtool;
+		devtool = Array.isArray(devtool)
+			? devtool
+			: typeof devtool === "string"
+				? [{ type: "all", use: devtool }]
+				: [];
 
-				new EvalDevToolModulePlugin({
-					moduleFilenameTemplate: options.output.devtoolModuleFilenameTemplate,
-					namespace: options.output.devtoolNamespace
-				}).apply(compiler);
+		for (const item of devtool) {
+			const { type, use } = item;
+
+			if (use) {
+				if (use.includes("source-map")) {
+					const hidden = use.includes("hidden");
+					const inline = use.includes("inline");
+					const evalWrapped = use.includes("eval");
+					const cheap = use.includes("cheap");
+					const moduleMaps = use.includes("module");
+					const noSources = use.includes("nosources");
+					const debugIds = use.includes("debugids");
+					const Plugin = evalWrapped
+						? require("./EvalSourceMapDevToolPlugin")
+						: require("./SourceMapDevToolPlugin");
+					const assetExt =
+						type === "javascript"
+							? /\.((c|m)?js)($|\?)/i
+							: type === "css"
+								? /\.(css)($|\?)/i
+								: /\.((c|m)?js|css)($|\?)/i;
+
+					new Plugin({
+						test: evalWrapped ? undefined : assetExt,
+						filename: inline ? null : options.output.sourceMapFilename,
+						moduleFilenameTemplate:
+							options.output.devtoolModuleFilenameTemplate,
+						fallbackModuleFilenameTemplate:
+							options.output.devtoolFallbackModuleFilenameTemplate,
+						append: hidden ? false : undefined,
+						module: moduleMaps ? true : !cheap,
+						columns: !cheap,
+						noSources,
+						namespace: options.output.devtoolNamespace,
+						debugIds
+					}).apply(compiler);
+				} else if (use.includes("eval")) {
+					const EvalDevToolModulePlugin = require("./EvalDevToolModulePlugin");
+
+					new EvalDevToolModulePlugin({
+						moduleFilenameTemplate:
+							options.output.devtoolModuleFilenameTemplate,
+						namespace: options.output.devtoolNamespace
+					}).apply(compiler);
+				}
 			}
 		}
 
 		new JavascriptModulesPlugin().apply(compiler);
 		new JsonModulesPlugin().apply(compiler);
-		new AssetModulesPlugin().apply(compiler);
+		new AssetModulesPlugin({
+			sideEffectFree: options.experiments.futureDefaults
+		}).apply(compiler);
 
 		if (!options.experiments.outputModule) {
 			if (options.output.module) {
@@ -408,6 +432,39 @@
 				typeof options.experiments.lazyCompilation === "object"
 					? options.experiments.lazyCompilation
 					: {};
+			const isUniversalTarget =
+				options.output.module &&
+				compiler.platform.node === null &&
+				compiler.platform.web === null;
+
+			if (isUniversalTarget) {
+				const emitter = require.resolve("../hot/emitter-event-target.js");
+
+				const NormalModuleReplacementPlugin = require("./NormalModuleReplacementPlugin");
+
+				// Override emitter that using `EventEmitter` to `EventTarget`
+				// TODO webpack 6 - migrate to `EventTarget` by default
+				new NormalModuleReplacementPlugin(/emitter(\.js)?$/, (result) => {
+					if (
+						/webpack[/\\]hot|webpack-dev-server[/\\]client|webpack-hot-middleware[/\\]client/.test(
+							result.context
+						)
+					) {
+						result.request = emitter;
+					}
+
+					return result;
+				}).apply(compiler);
+			}
+
+			const backend = require.resolve(
+				isUniversalTarget
+					? "../hot/lazy-compilation-universal.js"
+					: `../hot/lazy-compilation-${
+							options.externalsPresets.node ? "node" : "web"
+						}.js`
+			);
+
 			new LazyCompilationPlugin({
 				backend:
 					typeof lazyOptions.backend === "function"
@@ -415,12 +472,7 @@
 						: require("./hmr/lazyCompilationBackend")({
 								...lazyOptions.backend,
 								client:
-									(lazyOptions.backend && lazyOptions.backend.client) ||
-									require.resolve(
-										`../hot/lazy-compilation-${
-											options.externalsPresets.node ? "node" : "web"
-										}.js`
-									)
+									(lazyOptions.backend && lazyOptions.backend.client) || backend
 							}),
 				entries: !lazyOptions || lazyOptions.entries !== false,
 				imports: !lazyOptions || lazyOptions.imports !== false,
@@ -435,11 +487,18 @@
 			new HttpUriPlugin(httpOptions).apply(compiler);
 		}
 
-		if (options.experiments.deferImport) {
-			const JavascriptParser = require("./javascript/JavascriptParser");
+		if (
+			!(
+				/** @type {typeof JavascriptParser & { __importPhasesExtended?: true }} */
+				(JavascriptParser).__importPhasesExtended
+			) &&
+			(options.experiments.deferImport || options.experiments.sourceImport)
+		) {
 			const importPhases = require("acorn-import-phases");
 
-			JavascriptParser.extend(importPhases({ source: false }));
+			JavascriptParser.extend(importPhases({ source: true, defer: true }));
+			/** @type {typeof JavascriptParser & { __importPhasesExtended?: true }} */
+			(JavascriptParser).__importPhasesExtended = true;
 		}
 
 		new EntryOptionPlugin().apply(compiler);

--
Gitblit v1.9.3