在webassembly.org、JS页面中,在javascript中导入WebAssembly的方法是
fetch('example.wasm').then(response => response.arrayBuffer())
.then(bytes => instantiate(bytes, importObject))
.then(instance => instance.exports.e());emcc发出的js文件似乎可以做到这一点。
但是,当我对Rust的货物使用wasm-pack时,javascript文件只是执行import * as wasm from './example.wasm'
这两个有什么不同?直接导入是新支持的功能吗?当使用直接导入时,我如何从javascript访问WebAssembly的内存,因为我没有像使用第一种方法那样将它们传递给WebAssembly模块?
发布于 2019-10-12 04:18:24
WebAssembly模块的声明性导入尚未标准化。我假设wasm-pack针对的是Node.js的实验性导入特性:https://www.joyent.com/blog/improved-wasm-support-coming-to-node#importing-webassembly-modules
如何访问内存取决于模块:如果它导出它,您可以作为成员访问它,如果它导入它,它必须以您将在导入对象中使用的名称作为ES6模块的成员。
发布于 2021-03-10 18:10:31
根据平台的不同,如果wasm模块在web浏览器中运行,请按照前面提到的方式获取和实例化。当在nodejs中运行WASM时,WASI已经能够提供甚至文件系统沙箱。它可以使用实例化中的节点Fs从磁盘读取文件
const importObject = { wasi_snapshot_preview1: wasi.wasiImport };
const wasm = await WebAssembly.compile(fs.readFileSync('./demo.wasm'));
const instance = await WebAssembly.instantiate(wasm, importObject);
wasi.start(instance);https://stackoverflow.com/questions/58049193
复制相似问题