Javascript 仅加载WebAssembly模块一次/单个

Javascript 仅加载WebAssembly模块一次/单个,javascript,import,singleton,webassembly,Javascript,Import,Singleton,Webassembly,我想在React应用程序中使用WebAssembly模块。应用程序启动时加载模块。现在我想在另一个Javascript模块中重用这个wasm模块 如何在其他JS模块中重用这些wasm模块?我真的必须再次加载模块吗 在主模块中加载wasm: Promise.all([ import("webassembly-tests-rust") //... ]) .then(modules => { // how to store the module to ma

我想在React应用程序中使用WebAssembly模块。应用程序启动时加载模块。现在我想在另一个Javascript模块中重用这个wasm模块

如何在其他JS模块中重用这些wasm模块?我真的必须再次加载模块吗

在主模块中加载wasm:

Promise.all([
    import("webassembly-tests-rust")
    //...
])
    .then(modules => {
        // how to store the module to make it available in other modules?
        wasm["rust"] = modules[0];
        //...
    })
其他模块:

wasm.rust.somefunction();

这样行吗

wasm.js

let wasm
export const getWasm = () =>
  wasm
    ? Promise.resolve(wasm)
    : import('webassembly-tests-rust').then(_wasm => {
        wasm = _wasm;
        return wasm;
      })
import getWasm from 'wasm.js'
Promise.all([
    getWasm
    //...
])
    .then(modules => {
        modules[0].someFunction = () => console.log('foo')
        //...
    })
module.js

let wasm
export const getWasm = () =>
  wasm
    ? Promise.resolve(wasm)
    : import('webassembly-tests-rust').then(_wasm => {
        wasm = _wasm;
        return wasm;
      })
import getWasm from 'wasm.js'
Promise.all([
    getWasm
    //...
])
    .then(modules => {
        modules[0].someFunction = () => console.log('foo')
        //...
    })
其他模块:

import getWasm from 'wasm.js'
getWasm().then(wasm => wasm.somefunction()) // console.log('foo')

为什么不将wasm模块设置为ES6模块,然后期望它发生树震动呢?您的意思是静态
从“模块”导入wasm?WebAssembly模块不支持此操作。您必须异步加载它们(dynamicimport或fetch())。我目前的解决方案是将加载的模块保存在
window.wasm
下,但我认为有更好的方法。