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/ExternalModule.js |  118 +++++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 103 insertions(+), 15 deletions(-)

diff --git a/node_modules/webpack/lib/ExternalModule.js b/node_modules/webpack/lib/ExternalModule.js
index 1284053..500689e 100644
--- a/node_modules/webpack/lib/ExternalModule.js
+++ b/node_modules/webpack/lib/ExternalModule.js
@@ -5,6 +5,7 @@
 
 "use strict";
 
+const { SyncBailHook } = require("tapable");
 const { OriginalSource, RawSource } = require("webpack-sources");
 const ConcatenationScope = require("./ConcatenationScope");
 const EnvironmentNotSupportAsyncWarning = require("./EnvironmentNotSupportAsyncWarning");
@@ -14,8 +15,9 @@
 const {
 	CSS_IMPORT_TYPES,
 	CSS_URL_TYPES,
-	JS_TYPES
-} = require("./ModuleSourceTypesConstants");
+	JAVASCRIPT_TYPE,
+	JAVASCRIPT_TYPES
+} = require("./ModuleSourceTypeConstants");
 const { JAVASCRIPT_MODULE_TYPE_DYNAMIC } = require("./ModuleTypeConstants");
 const RuntimeGlobals = require("./RuntimeGlobals");
 const Template = require("./Template");
@@ -24,7 +26,7 @@
 const createHash = require("./util/createHash");
 const extractUrlAndGlobal = require("./util/extractUrlAndGlobal");
 const makeSerializable = require("./util/makeSerializable");
-const propertyAccess = require("./util/propertyAccess");
+const { propertyAccess } = require("./util/property");
 const { register } = require("./util/serialization");
 
 /** @typedef {import("webpack-sources").Source} Source */
@@ -44,12 +46,15 @@
 /** @typedef {import("./Module").BuildInfo} BuildInfo */
 /** @typedef {import("./Module").CodeGenerationContext} CodeGenerationContext */
 /** @typedef {import("./Module").CodeGenerationResult} CodeGenerationResult */
+/** @typedef {import("./Module").CodeGenerationResultData} CodeGenerationResultData */
 /** @typedef {import("./Module").ConcatenationBailoutReasonContext} ConcatenationBailoutReasonContext */
 /** @typedef {import("./Module").LibIdentOptions} LibIdentOptions */
 /** @typedef {import("./Module").LibIdent} LibIdent */
 /** @typedef {import("./Module").NeedBuildCallback} NeedBuildCallback */
 /** @typedef {import("./Module").NeedBuildContext} NeedBuildContext */
+/** @typedef {import("./Module").RuntimeRequirements} RuntimeRequirements */
 /** @typedef {import("./Module").ReadOnlyRuntimeRequirements} ReadOnlyRuntimeRequirements */
+/** @typedef {import("./Module").Sources} Sources */
 /** @typedef {import("./ModuleGraph")} ModuleGraph */
 /** @typedef {import("./NormalModuleFactory")} NormalModuleFactory */
 /** @typedef {import("./RequestShortener")} RequestShortener */
@@ -70,6 +75,7 @@
 /** @typedef {ImportDependencyMeta | CssImportDependencyMeta | AssetDependencyMeta} DependencyMeta */
 
 /**
+ * Defines the source data type used by this module.
  * @typedef {object} SourceData
  * @property {boolean=} iife
  * @property {string=} init
@@ -81,14 +87,19 @@
 
 /** @typedef {true | [string, string][]} Imported */
 
+/** @type {RuntimeRequirements} */
 const RUNTIME_REQUIREMENTS = new Set([RuntimeGlobals.module]);
+/** @type {RuntimeRequirements} */
 const RUNTIME_REQUIREMENTS_FOR_SCRIPT = new Set([RuntimeGlobals.loadScript]);
+/** @type {RuntimeRequirements} */
 const RUNTIME_REQUIREMENTS_FOR_MODULE = new Set([
 	RuntimeGlobals.definePropertyGetters
 ]);
-const EMPTY_RUNTIME_REQUIREMENTS = new Set([]);
+/** @type {RuntimeRequirements} */
+const EMPTY_RUNTIME_REQUIREMENTS = new Set();
 
 /**
+ * Gets source for global variable external.
  * @param {string | string[]} variableName the variable name or path
  * @param {string} type the module system
  * @returns {SourceData} the generated source
@@ -112,6 +123,7 @@
 /** @typedef {string | string[]} ModuleAndSpecifiers */
 
 /**
+ * Gets source for common js external.
  * @param {ModuleAndSpecifiers} moduleAndSpecifiers the module request
  * @returns {SourceData} the generated source
  */
@@ -131,6 +143,7 @@
 };
 
 /**
+ * Gets external module node commonjs init fragment.
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
  * @returns {InitFragment<ChunkRenderContext>} code
  */
@@ -148,6 +161,7 @@
 };
 
 /**
+ * Gets source for common js external in node module.
  * @param {ModuleAndSpecifiers} moduleAndSpecifiers the module request
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
  * @returns {SourceData} the generated source
@@ -177,6 +191,7 @@
 };
 
 /**
+ * Gets source for import external.
  * @param {ModuleAndSpecifiers} moduleAndSpecifiers the module request
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
  * @param {ImportDependencyMeta=} dependencyMeta the dependency meta
@@ -231,6 +246,7 @@
 };
 
 /**
+ * Import assertion replacer.
  * @param {string} key key
  * @param {ImportAttributes | string | boolean | undefined} value value
  * @returns {ImportAttributes | string | boolean | undefined} replaced value
@@ -244,10 +260,12 @@
 };
 
 /**
+ * Represents ModuleExternalInitFragment.
  * @extends {InitFragment<GenerateContext>}
  */
 class ModuleExternalInitFragment extends InitFragment {
 	/**
+	 * Creates an instance of ModuleExternalInitFragment.
 	 * @param {string} request import source
 	 * @param {Imported} imported the imported specifiers
 	 * @param {string=} ident recomputed ident
@@ -285,6 +303,7 @@
 	}
 
 	/**
+	 * Returns imported.
 	 * @returns {Imported} imported
 	 */
 	getImported() {
@@ -292,6 +311,7 @@
 	}
 
 	/**
+	 * Updates imported using the provided imported.
 	 * @param {Imported} imported imported
 	 */
 	setImported(imported) {
@@ -299,6 +319,7 @@
 	}
 
 	/**
+	 * Returns the source code that will be included as initialization code.
 	 * @param {GenerateContext} context context
 	 * @returns {string | Source | undefined} the source code that will be included as initialization code
 	 */
@@ -346,6 +367,7 @@
 	}
 
 	/**
+	 * Returns identifier.
 	 * @param {string} ident ident
 	 * @returns {string} identifier
 	 */
@@ -354,6 +376,7 @@
 	}
 
 	/**
+	 * Returns normalized imported.
 	 * @param {Imported} imported imported
 	 * @returns {Imported} normalized imported
 	 */
@@ -386,6 +409,7 @@
 );
 
 /**
+ * Generates module remapping.
  * @param {string} input input
  * @param {ExportsInfo} exportsInfo the exports info
  * @param {RuntimeSpec=} runtime the runtime
@@ -399,6 +423,7 @@
 	runtimeTemplate
 ) => {
 	if (exportsInfo.otherExportsInfo.getUsed(runtime) === UsageState.Unused) {
+		/** @type {string[]} */
 		const properties = [];
 		for (const exportInfo of exportsInfo.orderedExports) {
 			const used = exportInfo.getUsedName(exportInfo.name, runtime);
@@ -427,6 +452,7 @@
 };
 
 /**
+ * Gets source for module external.
  * @param {ModuleAndSpecifiers} moduleAndSpecifiers the module request
  * @param {ExportsInfo} exportsInfo exports info of this module
  * @param {RuntimeSpec} runtime the runtime
@@ -487,6 +513,7 @@
 	let expression = baseAccess;
 
 	const useNamespace = imported === true;
+	/** @type {undefined | string} */
 	let moduleRemapping;
 	if (useNamespace) {
 		moduleRemapping = generateModuleRemapping(
@@ -519,6 +546,7 @@
 };
 
 /**
+ * Gets source for script external.
  * @param {string | string[]} urlAndGlobal the script request
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
  * @returns {SourceData} the generated source
@@ -556,6 +584,7 @@
 };
 
 /**
+ * Checks external variable.
  * @param {string} variableName the variable name to check
  * @param {string} request the request path
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
@@ -567,6 +596,7 @@
 	)} }\n`;
 
 /**
+ * Gets source for amd or umd external.
  * @param {ModuleId | string} id the module id
  * @param {boolean} optional true, if the module is optional
  * @param {string | string[]} request the request path
@@ -595,6 +625,7 @@
 };
 
 /**
+ * Gets source for default case.
  * @param {boolean} optional true, if the module is optional
  * @param {string | string[]} request the request path
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
@@ -619,8 +650,18 @@
 /** @typedef {Record<string, string | string[]>} RequestRecord */
 /** @typedef {string | string[] | RequestRecord} ExternalModuleRequest */
 
+/**
+ * Defines the external module hooks type used by this module.
+ * @typedef {object} ExternalModuleHooks
+ * @property {SyncBailHook<[Chunk, Compilation], boolean>} chunkCondition
+ */
+
+/** @type {WeakMap<Compilation, ExternalModuleHooks>} */
+const compilationHooksMap = new WeakMap();
+
 class ExternalModule extends Module {
 	/**
+	 * Creates an instance of ExternalModule.
 	 * @param {ExternalModuleRequest} request request
 	 * @param {ExternalsType} type type
 	 * @param {string} userRequest user request
@@ -641,6 +682,23 @@
 	}
 
 	/**
+	 * Returns the attached hooks.
+	 * @param {Compilation} compilation the compilation
+	 * @returns {ExternalModuleHooks} the attached hooks
+	 */
+	static getCompilationHooks(compilation) {
+		let hooks = compilationHooksMap.get(compilation);
+		if (hooks === undefined) {
+			hooks = {
+				chunkCondition: new SyncBailHook(["chunk", "compilation"])
+			};
+			compilationHooksMap.set(compilation, hooks);
+		}
+		return hooks;
+	}
+
+	/**
+	 * Returns the source types this module can generate.
 	 * @returns {SourceTypes} types available (do not mutate)
 	 */
 	getSourceTypes() {
@@ -655,10 +713,11 @@
 			return CSS_IMPORT_TYPES;
 		}
 
-		return JS_TYPES;
+		return JAVASCRIPT_TYPES;
 	}
 
 	/**
+	 * Gets the library identifier.
 	 * @param {LibIdentOptions} options options
 	 * @returns {LibIdent | null} an identifier for library inclusion
 	 */
@@ -667,17 +726,28 @@
 	}
 
 	/**
+	 * Returns true if the module can be placed in the chunk.
 	 * @param {Chunk} chunk the chunk which condition should be checked
 	 * @param {Compilation} compilation the compilation
-	 * @returns {boolean} true, if the chunk is ok for the module
+	 * @returns {boolean} true if the module can be placed in the chunk
 	 */
-	chunkCondition(chunk, { chunkGraph }) {
-		return this.externalType === "css-import"
-			? true
-			: chunkGraph.getNumberOfEntryModules(chunk) > 0;
+	chunkCondition(chunk, compilation) {
+		const { chunkCondition } = ExternalModule.getCompilationHooks(compilation);
+		const condition = chunkCondition.call(chunk, compilation);
+		if (condition !== undefined) return condition;
+
+		const type = this._resolveExternalType(this.externalType);
+
+		// For `import()` externals, keep them in the initial chunk to avoid loading
+		// them asynchronously twice and to improve runtime performance.
+		if (["css-import", "module"].includes(type)) {
+			return true;
+		}
+		return compilation.chunkGraph.getNumberOfEntryModules(chunk) > 0;
 	}
 
 	/**
+	 * Returns the unique identifier used to reference this module.
 	 * @returns {string} a unique identifier of the module
 	 */
 	identifier() {
@@ -685,6 +755,7 @@
 	}
 
 	/**
+	 * Returns a human-readable identifier for this module.
 	 * @param {RequestShortener} requestShortener the request shortener
 	 * @returns {string} a user readable identifier of the module
 	 */
@@ -693,6 +764,7 @@
 	}
 
 	/**
+	 * Checks whether the module needs to be rebuilt for the current build state.
 	 * @param {NeedBuildContext} context context info
 	 * @param {NeedBuildCallback} callback callback function, returns true, if the module needs a rebuild
 	 * @returns {void}
@@ -702,6 +774,7 @@
 	}
 
 	/**
+	 * Builds the module using the provided compilation context.
 	 * @param {WebpackOptions} options webpack options
 	 * @param {Compilation} compilation the compilation
 	 * @param {ResolverWithOptions} resolver the resolver
@@ -795,6 +868,7 @@
 	}
 
 	/**
+	 * Returns the reason this module cannot be concatenated, when one exists.
 	 * @param {ConcatenationBailoutReasonContext} context context
 	 * @returns {string | undefined} reason why this module can't be concatenated, undefined when it can be concatenated
 	 */
@@ -812,6 +886,7 @@
 	}
 
 	/**
+	 * Get request and external type.
 	 * @private
 	 * @returns {{ request: string | string[], externalType: ExternalsType }} the request and external type
 	 */
@@ -858,6 +933,7 @@
 	}
 
 	/**
+	 * Returns the source data.
 	 * @private
 	 * @param {string | string[]} request request
 	 * @param {ExternalsType} externalType the external type
@@ -964,6 +1040,7 @@
 	}
 
 	/**
+	 * Generates code and runtime requirements for this module.
 	 * @param {CodeGenerationContext} context context for code generation
 	 * @returns {CodeGenerationResult} result
 	 */
@@ -977,22 +1054,27 @@
 		const { request, externalType } = this._getRequestAndExternalType();
 		switch (externalType) {
 			case "asset": {
+				/** @type {Sources} */
 				const sources = new Map();
 				sources.set(
-					"javascript",
+					JAVASCRIPT_TYPE,
 					new RawSource(`module.exports = ${JSON.stringify(request)};`)
 				);
+				/** @type {CodeGenerationResultData} */
 				const data = new Map();
-				data.set("url", { javascript: request });
+				data.set("url", { javascript: /** @type {string} */ (request) });
 				return { sources, runtimeRequirements: RUNTIME_REQUIREMENTS, data };
 			}
 			case "css-url": {
+				/** @type {Sources} */
 				const sources = new Map();
+				/** @type {CodeGenerationResultData} */
 				const data = new Map();
-				data.set("url", { "css-url": request });
+				data.set("url", { "css-url": /** @type {string} */ (request) });
 				return { sources, runtimeRequirements: RUNTIME_REQUIREMENTS, data };
 			}
 			case "css-import": {
+				/** @type {Sources} */
 				const sources = new Map();
 				const dependencyMeta = /** @type {CssImportDependencyMeta} */ (
 					this.dependencyMeta
@@ -1055,20 +1137,22 @@
 					sourceString = `${sourceData.init}\n${sourceString}`;
 				}
 
+				/** @type {undefined | CodeGenerationResultData} */
 				let data;
 				if (sourceData.chunkInitFragments) {
 					data = new Map();
 					data.set("chunkInitFragments", sourceData.chunkInitFragments);
 				}
 
+				/** @type {Sources} */
 				const sources = new Map();
 				if (this.useSourceMap || this.useSimpleSourceMap) {
 					sources.set(
-						"javascript",
+						JAVASCRIPT_TYPE,
 						new OriginalSource(sourceString, this.identifier())
 					);
 				} else {
-					sources.set("javascript", new RawSource(sourceString));
+					sources.set(JAVASCRIPT_TYPE, new RawSource(sourceString));
 				}
 
 				let runtimeRequirements = sourceData.runtimeRequirements;
@@ -1093,6 +1177,7 @@
 	}
 
 	/**
+	 * Returns the estimated size for the requested source type.
 	 * @param {string=} type the source type for which the size should be estimated
 	 * @returns {number} the estimated size of the module (must be non-zero)
 	 */
@@ -1101,6 +1186,7 @@
 	}
 
 	/**
+	 * Updates the hash with the data contributed by this instance.
 	 * @param {Hash} hash the hash used to track dependencies
 	 * @param {UpdateHashContext} context context
 	 * @returns {void}
@@ -1116,6 +1202,7 @@
 	}
 
 	/**
+	 * Serializes this instance into the provided serializer context.
 	 * @param {ObjectSerializerContext} context context
 	 */
 	serialize(context) {
@@ -1130,6 +1217,7 @@
 	}
 
 	/**
+	 * Restores this instance from the provided deserializer context.
 	 * @param {ObjectDeserializerContext} context context
 	 */
 	deserialize(context) {

--
Gitblit v1.9.3