From 3bd962a6d7f61239c020e2dbbeb7341e5b842dd1 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期二, 21 四月 2026 11:46:41 +0800
Subject: [PATCH] 推送
---
node_modules/webpack/lib/asset/AssetModulesPlugin.js | 134 ++++++++++++++++++++++++++++++++++----------
1 files changed, 102 insertions(+), 32 deletions(-)
diff --git a/node_modules/webpack/lib/asset/AssetModulesPlugin.js b/node_modules/webpack/lib/asset/AssetModulesPlugin.js
index bc400b7..4d8a17c 100644
--- a/node_modules/webpack/lib/asset/AssetModulesPlugin.js
+++ b/node_modules/webpack/lib/asset/AssetModulesPlugin.js
@@ -12,19 +12,24 @@
ASSET_MODULE_TYPE_RESOURCE,
ASSET_MODULE_TYPE_SOURCE
} = require("../ModuleTypeConstants");
-const { compareModulesByIdOrIdentifier } = require("../util/comparators");
-const createSchemaValidation = require("../util/create-schema-validation");
+const { compareModulesByFullName } = require("../util/comparators");
const memoize = require("../util/memoize");
/** @typedef {import("webpack-sources").Source} Source */
/** @typedef {import("schema-utils").Schema} Schema */
+/** @typedef {import("../../declarations/WebpackOptions").AssetGeneratorDataUrl} AssetGeneratorDataUrl */
+/** @typedef {import("../../declarations/WebpackOptions").AssetModuleOutputPath} AssetModuleOutputPath */
+/** @typedef {import("../../declarations/WebpackOptions").RawPublicPath} RawPublicPath */
+/** @typedef {import("../../declarations/WebpackOptions").FilenameTemplate} FilenameTemplate */
/** @typedef {import("../Compilation").AssetInfo} AssetInfo */
/** @typedef {import("../Compiler")} Compiler */
/** @typedef {import("../Module").BuildInfo} BuildInfo */
/** @typedef {import("../Module").CodeGenerationResult} CodeGenerationResult */
/** @typedef {import("../NormalModule")} NormalModule */
+/** @typedef {import("../NormalModule").NormalModuleCreateData} NormalModuleCreateData */
/**
+ * Returns definition.
* @param {string} name name of definitions
* @returns {Schema} definition
*/
@@ -41,32 +46,6 @@
name: "Asset Modules Plugin",
baseDataPath: "generator"
};
-const validateGeneratorOptions = {
- asset: createSchemaValidation(
- require("../../schemas/plugins/asset/AssetGeneratorOptions.check"),
- () => getSchema("AssetGeneratorOptions"),
- generatorValidationOptions
- ),
- "asset/resource": createSchemaValidation(
- require("../../schemas/plugins/asset/AssetResourceGeneratorOptions.check"),
- () => getSchema("AssetResourceGeneratorOptions"),
- generatorValidationOptions
- ),
- "asset/inline": createSchemaValidation(
- require("../../schemas/plugins/asset/AssetInlineGeneratorOptions.check"),
- () => getSchema("AssetInlineGeneratorOptions"),
- generatorValidationOptions
- )
-};
-
-const validateParserOptions = createSchemaValidation(
- require("../../schemas/plugins/asset/AssetParserOptions.check"),
- () => getSchema("AssetParserOptions"),
- {
- name: "Asset Modules Plugin",
- baseDataPath: "parser"
- }
-);
const getAssetGenerator = memoize(() => require("./AssetGenerator"));
const getAssetParser = memoize(() => require("./AssetParser"));
@@ -76,13 +55,28 @@
require("./AssetSourceGenerator")
);
const getAssetBytesGenerator = memoize(() => require("./AssetBytesGenerator"));
+const getNormalModule = memoize(() => require("../NormalModule"));
const type = ASSET_MODULE_TYPE;
const PLUGIN_NAME = "AssetModulesPlugin";
+/**
+ * Represents the asset modules plugin runtime component.
+ * @typedef {object} AssetModulesPluginOptions
+ * @property {boolean=} sideEffectFree
+ */
+
class AssetModulesPlugin {
/**
- * Apply the plugin
+ * Creates an instance of AssetModulesPlugin.
+ * @param {AssetModulesPluginOptions} options options
+ */
+ constructor(options) {
+ this.options = options;
+ }
+
+ /**
+ * Applies the plugin by registering its hooks on the compiler.
* @param {Compiler} compiler the compiler instance
* @returns {void}
*/
@@ -90,10 +84,45 @@
compiler.hooks.compilation.tap(
PLUGIN_NAME,
(compilation, { normalModuleFactory }) => {
+ const NormalModule = getNormalModule();
+ for (const type of [
+ ASSET_MODULE_TYPE,
+ ASSET_MODULE_TYPE_BYTES,
+ ASSET_MODULE_TYPE_INLINE,
+ ASSET_MODULE_TYPE_RESOURCE,
+ ASSET_MODULE_TYPE_SOURCE
+ ]) {
+ normalModuleFactory.hooks.createModuleClass
+ .for(type)
+ .tap(PLUGIN_NAME, (createData, _resolveData) => {
+ // TODO create the module via new AssetModule with its own properties
+ const module = new NormalModule(
+ /** @type {NormalModuleCreateData} */
+ (createData)
+ );
+ if (this.options.sideEffectFree) {
+ module.factoryMeta = { sideEffectFree: true };
+ }
+
+ return module;
+ });
+ }
+
normalModuleFactory.hooks.createParser
.for(ASSET_MODULE_TYPE)
.tap(PLUGIN_NAME, (parserOptions) => {
- validateParserOptions(parserOptions);
+ compiler.validate(
+ () => getSchema("AssetParserOptions"),
+ parserOptions,
+ {
+ name: "Asset Modules Plugin",
+ baseDataPath: "parser"
+ },
+ (options) =>
+ require("../../schemas/plugins/asset/AssetParserOptions.check")(
+ options
+ )
+ );
let dataUrlCondition = parserOptions.dataUrlCondition;
if (!dataUrlCondition || typeof dataUrlCondition === "object") {
@@ -144,8 +173,46 @@
normalModuleFactory.hooks.createGenerator
.for(type)
.tap(PLUGIN_NAME, (generatorOptions) => {
- validateGeneratorOptions[type](generatorOptions);
+ switch (type) {
+ case ASSET_MODULE_TYPE: {
+ compiler.validate(
+ () => getSchema("AssetGeneratorOptions"),
+ generatorOptions,
+ generatorValidationOptions,
+ (options) =>
+ require("../../schemas/plugins/asset/AssetGeneratorOptions.check")(
+ options
+ )
+ );
+ break;
+ }
+ case ASSET_MODULE_TYPE_RESOURCE: {
+ compiler.validate(
+ () => getSchema("AssetResourceGeneratorOptions"),
+ generatorOptions,
+ generatorValidationOptions,
+ (options) =>
+ require("../../schemas/plugins/asset/AssetResourceGeneratorOptions.check")(
+ options
+ )
+ );
+ break;
+ }
+ case ASSET_MODULE_TYPE_INLINE: {
+ compiler.validate(
+ () => getSchema("AssetInlineGeneratorOptions"),
+ generatorOptions,
+ generatorValidationOptions,
+ (options) =>
+ require("../../schemas/plugins/asset/AssetInlineGeneratorOptions.check")(
+ options
+ )
+ );
+ break;
+ }
+ }
+ /** @type {undefined | AssetGeneratorDataUrl} */
let dataUrl;
if (type !== ASSET_MODULE_TYPE_RESOURCE) {
dataUrl = generatorOptions.dataUrl;
@@ -158,8 +225,11 @@
}
}
+ /** @type {undefined | FilenameTemplate} */
let filename;
+ /** @type {undefined | RawPublicPath} */
let publicPath;
+ /** @type {undefined | AssetModuleOutputPath} */
let outputPath;
if (type !== ASSET_MODULE_TYPE_INLINE) {
filename = generatorOptions.filename;
@@ -202,7 +272,7 @@
const modules = chunkGraph.getOrderedChunkModulesIterableBySourceType(
chunk,
ASSET_MODULE_TYPE,
- compareModulesByIdOrIdentifier(chunkGraph)
+ compareModulesByFullName(compilation.compiler)
);
if (modules) {
for (const module of modules) {
--
Gitblit v1.9.3