仅一次加载WebAssembly模块/单例

时间:2019-04-02 13:19:19

标签: 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 make it available in other modules?
        wasm["rust"] = modules[0];
        //...
    })

其他模块:

wasm.rust.somefunction();

1 个答案:

答案 0 :(得分:0)

它会这样工作吗?

wasm.js

let wasm
export const getWasm = () =>
  wasm
    ? Promise.resolve(wasm)
    : import('webassembly-tests-rust').then(_wasm => {
        wasm = _wasm;
        return wasm;
      })

module.js

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')