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/wasm-async/UniversalCompileAsyncWasmPlugin.js | 41 ++++++++++++++++++++++++++++++++++++++---
1 files changed, 38 insertions(+), 3 deletions(-)
diff --git a/node_modules/webpack/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js b/node_modules/webpack/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js
index 043888c..361c868 100644
--- a/node_modules/webpack/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js
+++ b/node_modules/webpack/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js
@@ -8,6 +8,7 @@
const { WEBASSEMBLY_MODULE_TYPE_ASYNC } = require("../ModuleTypeConstants");
const RuntimeGlobals = require("../RuntimeGlobals");
const Template = require("../Template");
+const AsyncWasmCompileRuntimeModule = require("../wasm-async/AsyncWasmCompileRuntimeModule");
const AsyncWasmLoadingRuntimeModule = require("../wasm-async/AsyncWasmLoadingRuntimeModule");
/** @typedef {import("../Chunk")} Chunk */
@@ -15,9 +16,14 @@
const PLUGIN_NAME = "UniversalCompileAsyncWasmPlugin";
+/**
+ * Enables async WebAssembly loading that works in both browser-like and Node.js
+ * environments by selecting the appropriate binary-loading strategy at runtime.
+ */
class UniversalCompileAsyncWasmPlugin {
/**
- * Apply the plugin
+ * Registers compilation hooks that attach the universal async wasm runtime
+ * to chunks using `wasmLoading: "universal"`.
* @param {Compiler} compiler the compiler instance
* @returns {void}
*/
@@ -25,6 +31,8 @@
compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
const globalWasmLoading = compilation.outputOptions.wasmLoading;
/**
+ * Determines whether the chunk should use the universal async wasm
+ * loading backend.
* @param {Chunk} chunk chunk
* @returns {boolean} true, if wasm loading is enabled for the chunk
*/
@@ -36,13 +44,15 @@
: globalWasmLoading;
return wasmLoading === "universal";
};
- const generateBeforeInstantiateStreaming = () =>
+ const generateBeforeStreaming = () =>
Template.asString([
"if (!useFetch) {",
Template.indent(["return fallback();"]),
"}"
]);
/**
+ * Generates setup code that decides whether the current environment can
+ * use `fetch` and captures the wasm module URL.
* @param {string} path path
* @returns {string} code
*/
@@ -52,6 +62,8 @@
`var wasmUrl = ${path};`
]);
/**
+ * Generates the runtime expression that fetches the binary in browsers
+ * or reads it from the filesystem in Node.js.
* @type {(path: string) => string}
*/
const generateLoadBinaryCode = () =>
@@ -95,7 +107,30 @@
new AsyncWasmLoadingRuntimeModule({
generateBeforeLoadBinaryCode,
generateLoadBinaryCode,
- generateBeforeInstantiateStreaming,
+ generateBeforeInstantiateStreaming: generateBeforeStreaming,
+ supportsStreaming: true
+ })
+ );
+ });
+
+ compilation.hooks.runtimeRequirementInTree
+ .for(RuntimeGlobals.compileWasm)
+ .tap(PLUGIN_NAME, (chunk, set, { chunkGraph }) => {
+ if (!isEnabledForChunk(chunk)) return;
+ if (
+ !chunkGraph.hasModuleInGraph(
+ chunk,
+ (m) => m.type === WEBASSEMBLY_MODULE_TYPE_ASYNC
+ )
+ ) {
+ return;
+ }
+ compilation.addRuntimeModule(
+ chunk,
+ new AsyncWasmCompileRuntimeModule({
+ generateBeforeLoadBinaryCode,
+ generateLoadBinaryCode,
+ generateBeforeCompileStreaming: generateBeforeStreaming,
supportsStreaming: true
})
);
--
Gitblit v1.9.3