From 9bce51f651aad297ef9eb6df832bfdaf1de05d84 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期三, 22 四月 2026 14:27:54 +0800
Subject: [PATCH] 青岛推送

---
 node_modules/webpack/lib/LoaderOptionsPlugin.js |   36 ++++++++++++++++++++----------------
 1 files changed, 20 insertions(+), 16 deletions(-)

diff --git a/node_modules/webpack/lib/LoaderOptionsPlugin.js b/node_modules/webpack/lib/LoaderOptionsPlugin.js
index c0a31a3..b3db6e8 100644
--- a/node_modules/webpack/lib/LoaderOptionsPlugin.js
+++ b/node_modules/webpack/lib/LoaderOptionsPlugin.js
@@ -7,49 +7,53 @@
 
 const ModuleFilenameHelpers = require("./ModuleFilenameHelpers");
 const NormalModule = require("./NormalModule");
-const createSchemaValidation = require("./util/create-schema-validation");
 
 /** @typedef {import("../declarations/plugins/LoaderOptionsPlugin").LoaderOptionsPluginOptions} LoaderOptionsPluginOptions */
 /** @typedef {import("./Compiler")} Compiler */
 /** @typedef {import("./ModuleFilenameHelpers").MatchObject} MatchObject  */
 
 /**
+ * Defines the loader context type used by this module.
  * @template T
  * @typedef {import("../declarations/LoaderContext").LoaderContext<T>} LoaderContext
  */
-
-const validate = createSchemaValidation(
-	require("../schemas/plugins/LoaderOptionsPlugin.check"),
-	() => require("../schemas/plugins/LoaderOptionsPlugin.json"),
-	{
-		name: "Loader Options Plugin",
-		baseDataPath: "options"
-	}
-);
 
 const PLUGIN_NAME = "LoaderOptionsPlugin";
 
 class LoaderOptionsPlugin {
 	/**
+	 * Creates an instance of LoaderOptionsPlugin.
 	 * @param {LoaderOptionsPluginOptions & MatchObject} options options object
 	 */
 	constructor(options = {}) {
-		validate(options);
 		// If no options are set then generate empty options object
 		if (typeof options !== "object") options = {};
 		if (!options.test) {
 			options.test = () => true;
 		}
+		/** @type {LoaderOptionsPluginOptions & MatchObject} */
 		this.options = options;
 	}
 
 	/**
-	 * Apply the plugin
+	 * Applies the plugin by registering its hooks on the compiler.
 	 * @param {Compiler} compiler the compiler instance
 	 * @returns {void}
 	 */
 	apply(compiler) {
-		const options = this.options;
+		compiler.hooks.validate.tap(PLUGIN_NAME, () => {
+			compiler.validate(
+				() => require("../schemas/plugins/LoaderOptionsPlugin.json"),
+				this.options,
+				{
+					name: "Loader Options Plugin",
+					baseDataPath: "options"
+				},
+				(options) =>
+					require("../schemas/plugins/LoaderOptionsPlugin.check")(options)
+			);
+		});
+
 		compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
 			NormalModule.getCompilationHooks(compilation).loader.tap(
 				PLUGIN_NAME,
@@ -59,17 +63,17 @@
 					const i = resource.indexOf("?");
 					if (
 						ModuleFilenameHelpers.matchObject(
-							options,
+							this.options,
 							i < 0 ? resource : resource.slice(0, i)
 						)
 					) {
-						for (const key of Object.keys(options)) {
+						for (const key of Object.keys(this.options)) {
 							if (key === "include" || key === "exclude" || key === "test") {
 								continue;
 							}
 
 							/** @type {LoaderContext<EXPECTED_ANY> & Record<string, EXPECTED_ANY>} */
-							(context)[key] = options[key];
+							(context)[key] = this.options[key];
 						}
 					}
 				}

--
Gitblit v1.9.3