Запуск файла .wasm в node.js

Я прочитал много статей о запуске файлов wasm в node.js. Всякий раз, когда я проверяю код, он выдает эту ошибку

[TypeError: WebAssembly.instantiate (): ошибка импорта # 0 module = "wasi_snapshot_preview1" ошибка: модуль не является объектом или функцией]

и тогда это ничего не показывает в результате. Я использую этот код:

const sp = {
  env: {
    memoryBase: 0,
    tableBase: 0,
    memory: new WebAssembly.Memory({
      initial: 256
    }),
    table: new WebAssembly.Table({
      initial: 0,
      element: 'anyfunc'
    })
  },
  imports: {
    imported_func: arg => {
      console.log(arg);
    }
  }
}

const fs = require('fs')
, wasm = WebAssembly.instantiate(new Uint8Array(fs.readFileSync('./test.wasm')), sp)
.then(result => console.log(result));

Этот код выбрасывает вышеуказанную ошибку.

Что-то я делаю не так?

РЕШЕНИЕ:

В моем коде не было ничего плохого, скорее здесь было что-то не так с тем, как я компилировал свой код. Вместо того, чтобы использовать

em++ test.cpp -o test.wasm

Я должен был использовать:

em++ -O1 test.cpp -o test.wasm -s WASM=1

Всего 1 ответ


Сообщение об ошибке выглядит следующим образом:

[TypeError: WebAssembly.instantiate (): ошибка импорта # 0 module = "wasi_snapshot_preview1" ошибка: модуль не является объектом или функцией]

Это означает, что ваш модуль WebAssembly, test.wasm , ожидает импорт с именем wasi_snapshot_preview1 , который необходим для его создания. Это не имеет ничего общего со средой Node, вы увидите ту же ошибку в браузере.

Как вы собираете и компилируете свой модуль WebAssembly? Этот импорт предполагает, что вы используете WASI.

Я бы порекомендовал начать с гораздо более простого примера WebAssembly.


Есть идеи?

10000