Я получил этот код из ссылки stackoverflow:
Как использовать WebAssembly из node.js?
Создайте файл test.c:
int add(int a, int b) {
return a + b;
}
Создайте автономный файл .wasm
emcc test.c -O2 -s WASM=1 -s SIDE_MODULE=1 -o test.wasm
Используйте файл .wasm в приложении Node.js:
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.info(util.inspect(result, true, 0));
console.info(result.instance.exports._add(9, 9));
}).catch(e => {
// error caught
console.info(e);
});
Ошибка получения при запуске сервера Node.js с
node Node.js
LinkError: WebAssembly Instantiation: Import # 3 module = "env" function = "abort" error: для импорта функции требуется вызываемый





Загрузка SIDE_MODULE, созданного с помощью emscripten, с использованием вашего собственного кода будет сложной задачей, потому что модуль, созданный с помощью emscripten, ожидает, что он будет хостом с помощью сгенерированного emscripten кода JavaScript. Чтобы заставить его работать, вам нужно будет предоставить совместимую среду. Было бы проще отказаться от SIDE_MODULE и заставить emscripten выводить для вас модуль js с -o <something>.js, который сгенерирует как файл wasm, так и файл js, который его загружает.
Если вы все-таки хотите продолжать писать код загрузки от руки, похоже, что первое, что вам нужно сделать, - это приватность и реализация функции abort в env, которую вы передаете для создания экземпляра. Скорее всего, вам потребуются и другие функции, и этот интерфейс может измениться по мере развития emscripten.