Node.js 将hello world编译为wasm并在节点中运行

Node.js 将hello world编译为wasm并在节点中运行,node.js,webassembly,Node.js,Webassembly,我试图在node.js中运行一个webassembly模块,我得到了一个Wasm解码失败result。我认为我的问题是将节点缓冲区转换为阵列缓冲区。以下是我的适用代码: fs.readFileAsync( WASM_PATH ) .then( buf => buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength) ) .then( arrayBuffer => Wasm.instantiateModul

我试图在node.js中运行一个webassembly模块,我得到了一个
Wasm解码失败result
。我认为我的问题是将节点
缓冲区
转换为
阵列缓冲区
。以下是我的适用代码:

fs.readFileAsync( WASM_PATH )
  .then( buf => buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength) )
  .then( arrayBuffer => Wasm.instantiateModule(arrayBuffer) )
  .then( results => console.log(results.instance) )
  .catch( err => console.error(err) );
我得到这个错误:

(relevant details) 

Wasm decoding failedResult = expected version 0c 00 00 00, found 01 00 00 00 @+4

当我使用emcc hello_world.c-s WASM=1-o hello.html时,我可以加载模块并在浏览器中运行它。所以,我很确定这是我这边的一个问题,或者是一些兼容性问题。提前感谢。

您的节点版本使用了旧的MVP之前版本的V8,该版本需要
0xC
。您的工具链会发出警告

节点,并添加对MVP WebAssembly的支持。该页面显示Chrome57的V8版本为5.7.492.65

因此,在Node中对MVP的支持迫在眉睫

或者,您可以使用旧的Emscripten工具链。不过它可能已经很老了:
0xd
是MVP之前的版本(并且
0xd
实际上与MVP相同,以版本为模)