Rust Game of Life のチュートリアルを完了し、Web ブラウザーで動作するゲームを持っていますが、バンドルされているデモ Web サーバーからのみ動作します。サーバーを起動するnpm start
と、ポート 8080 で webpack-dev-server が実行されます。そのポートを介してサイトにアクセスすると、正常に動作します。ただし、サイトを Apache などの Web サーバーにコピーしようとすると、正しく読み込まれません。私が現在得ているエラーは次のとおりです。
Error importing `index.js`: TypeError: Error resolving module specifier “wasm-game-of-life”. Relative module specifiers must start with “./”, “../” or “/”. bootstrap.js:5:23
<anonymous> http://www.north-winds.org/gol/bootstrap.js:5
チュートリアルから、Web サイトのルートはwww/
リポジトリで呼び出されるフォルダーであり、Rust プログラムから生成された wasm モジュールは の下に配置されpkg/
ます。www/node_modules/wasm-game-of-life
そのポイントからのシンボリックリンクがあり、../../pkg/
そのシンボリックリンクを最上位pkg/
フォルダーの実際のコピーに置き換えて、Web サイトがフォルダー内に完全に含まれるようにし、www/
そのフォルダーを自分の Web サイトのhttp://に配置しました。 www.north-winds.org/gol/にアクセスすると、上記のエラーが返されます。スタンドアロンで動作させるには、何を変更する必要がありますか?
私が理解しているように、この WebAssembly Game-of-Life は基本的にスタンドアロンのクライアント側アプリであり、適切な MIME タイプが添付された静的ファイルを提供できる Web サーバー以外には何も必要ありません。必要な特別なものは何もありません。どこかで WebSockets についての言及を見ましたが、なぜこのアプリにそれが必要なのかわかりません。これをhttps://webassembly.org/の C 用の "Hello, World" WebAssembly の例と比較すると、C ソース コードから生成された.wasm
ファイルと、それを実行するための単一の JavaScript および HTML サポート ファイルが得られました。静的な Web サーバーの場所にコピーするだけで、ファイルは正しく機能しました。これは、Rust の例で私が望むものです。
Rust Game-of-Life の関連コードは次のとおりです。最上位の HTML ファイルには、次の行が含まれています。
<script src="./bootstrap.js"></script>
ブートストラップ JavaScript ファイルには、これだけが含まれています。
import("./index.js")
.catch(e => console.error("Error importing `index.js`:", e));
そして、それが参照する index.js ファイルには、Wasm の他のグルー ロジックの中でも次のものが含まれています。
import { Universe, Cell } from "wasm-game-of-life";
// Import the WebAssembly memory at the top of the file.
import { memory } from "wasm-game-of-life/wasm_game_of_life_bg";
この作業をスタンドアロンにするために欠けているものは何ですか?