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/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