5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Electronはapplication/wasmが分からない

Last updated at Posted at 2020-07-31

起こった事

Rustで書いたプログラムをwasm-packを用いてビルドし、出力されたファイルをJS側から

import wasm from "path/to/wasm/output/app_name_bg.js;

として読み込んでいた。

ブラウザ上では動いたがElectronでも同じやり方をするとapplication/wasmっていうMIMEタイプは間違っているとエラーを吐きwasmを読み込めなかった

結論

Rustで使用しているwasm-bindgenと同じバージョンのwasm-bindgen-cliをインストールする。

$ cargo install -f --version 0.2.64 wasm-bindgen-cli  

ターゲットにwasm32-unknown-unknownを指定してビルド

$ cargo build --target wasm32-unknown-unknown --release

wasm-bindgenコマンドを用いてwasmを任意のディレクトリに出力

$ wasm-bindgen target/wasm32-unknown-unknown/release/app_name.wasm --out-dir path/to/wasm/output --target web

Electronのindex.htmlheaderタグ内に以下のコードを追加

<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline' 'unsafe-eval'; object-src 'self'"/>

レンダープロセス側のJSで以下のように書く事でwasmを呼び出せる。

import { MyClass, MyFunc, default} from 'path/to/wasm/output/app_name.js';
let my_class; // 他の部分でもクラスを利用したい場合
async function init() {
    await default('path/to/wasm/output/app_name_bg.wasm'); // defaultはRustのコードに関わらず読み込んで呼び出す
    my_class = new MyClass(); // RustでImpl/Structを公開していた場合
    MyFunc(); // Rustで関数を公開していた場合
}
init();

これでElectronでwasmを読み込めるようになった。

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?