我正在尝试在node.js中本地实例化.wasm文件。目标是在本地运行二进制文件并复制网页的功能。这是我的最小可复制示例:
const fetch = require("node-fetch");
const importObject = {
imports: {
imported_func: function(arg) {
console.log(arg);
}
}
};
fetch('https://www.supremenewyork.com/ticket.wasm').then(response =>
response.arrayBuffer()
).then(bytes => {
let mod = new WebAssembly.Module(bytes);
let instance = new WebAssembly.Instance(mod, importObject);
instance.exports.exported_func();
})
我得到的错误是:TypeError: WebAssembly.Instance(): Import #0 module="wasi_unstable" error: module is not an object or function
我看到了一些类似问题的问题,但是没有提供真正的解决方案。这是我第一次与wasm合作,所以我很失落。
感谢您的帮助。
您的模块似乎取决于wasi_unstable
API。如果要加载它,则需要该API的实现。
要确切了解模块需要什么导入,可以分别使用wabt和binaryen项目中的wasm2wat
或wasmdis
工具。
如果您使用emscripten构建wasm模块,那么建议的做法是让emscripten生成JS,以实现这些API,并为您加载模块。
如果使用wasi-sdk构建wasm模块,则需要WASI API的某种Web polyfill。
这将使错误消失:
const importObject = {
imports: {
imported_func: function(arg) {
console.log(arg);
},
wasi_unstable: () => {}
}
};