You can build a .wasm file (standalone) without JS glue file. Someone has answered the similar question.
Create a test.c file:
int add(int a, int b) {
return a + b;
}
Build the standalone .wasm file:
emcc test.c -O2 -s WASM=1 -s SIDE_MODULE=1 -o test.wasm
Use the .wasm file in Node.js app:
const util = require('util');
const fs = require('fs');
var source = fs.readFileSync('./test.wasm');
const env = {
memoryBase: 0,
tableBase: 0,
memory: new WebAssembly.Memory({
initial: 256
}),
table: new WebAssembly.Table({
initial: 0,
element: 'anyfunc'
})
}
var typedArray = new Uint8Array(source);
WebAssembly.instantiate(typedArray, {
env: env
}).then(result => {
console.log(util.inspect(result, true, 0));
console.log(result.instance.exports._add(9, 9));
}).catch(e => {
// error caught
console.log(e);
});
The key part is the second parameter of WebAssembly.instantiate(). Without it, you will get the error message:
TypeError: WebAssembly Instantiation: Imports argument must be present
and must be an object
at
at process._tickCallback (internal/process/next_tick.js:188:7)
at Function.Module.runMain (module.js:695:11)
at startup (bootstrap_node.js:191:16)
at bootstrap_node.js:612:3
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…