Запуск файла .wasm в node.js - PullRequest
3 голосов
/ 14 января 2020

Я прочитал много статей о запуске файлов 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 Ответ

0 голосов
/ 14 января 2020

Сообщается об ошибке:

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

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

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

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

...