WebAssembly.Module.exports()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since October 2017.

WebAssembly.Module.exports() 関数は、指定された Module のエクスポート宣言の定義の配列を返します。

構文

js
WebAssembly.Module.exports(module);

引数

module

WebAssembly.Module オブジェクトです。

返値

指定したモジュールのエクスポートされた関数を表現するオブジェクトの配列です。

例外

モジュールが WebAssembly.Module オブジェクトのインスタンスではない場合、TypeError が発生します。

exports の使用

次の例 (Github のデモ index-compile.html と、動作例も参照) では、WebAssembly.compileStreaming() 関数を使用して読み込んだ simple.wasm のバイトコードをコンパイルして、ワーカーpostMessage() を使用して送信しています。

js
var worker = new Worker("wasm_worker.js");

WebAssembly.compileStreaming(fetch("simple.wasm")).then((mod) =>
  worker.postMessage(mod),
);

ワーカー (wasm_worker.js を参照) 内で、モジュールで使用するためにインポートオブジェクトを定義して、そのあとにメインスレッドからモジュールを受け取るためのイベントハンドラーをセットアップします。モジュールを受け取ったとき、WebAssembly.Instantiate() メソッドを使用してインスタンスを生成し、その内部でエクスポートされた関数を実行します。そのあとに WebAssembly.Module.exports を使用してモジュール上の利用可能なエクスポートの情報を返す方法を示します。

js
var importObject = {
  imports: {
    imported_func: function (arg) {
      console.log(arg);
    },
  },
};

onmessage = function (e) {
  console.log("module received from main thread");
  var mod = e.data;

  WebAssembly.instantiate(mod, importObject).then(function (instance) {
    instance.exports.exported_func();
  });

  var exports = WebAssembly.Module.exports(mod);
  console.log(exports[0]);
};

exports[0] の出力はこのようになります。

js
{ name: "exported_func", kind: "function" }

仕様書

Specification
WebAssembly JavaScript Interface
# dom-module-exports

ブラウザーの互換性

BCD tables only load in the browser

関連情報