の続きです。前回fetchで実装してみたところ、非同期APIではrequire_relativeの同期性*1を保証できないことに気が付きました。
ブラウザから同期でHTTPリクエストを飛ばすのであればXMLHttpRequestを使えばよいはずです。 つまり、こうです。
var request = new XMLHttpRequest(); request.open("GET", url, false); request.send(null); if (request.status === 200 && request.responseText) { vm.eval(request.responseText); return true; }
順序の制御がうまくいきました。 いろいろ試しています。 例えば・・
require_relative "lib/a-1"
で読み込んだa-1.rbから
require_relative "../b"
してみます。
http://localhost:8080/ruby-wasm-wasi/example/lib/a-1.rb から ../b
を参照しています。
http://localhost:8080/ruby-wasm-wasi/example/b.rb にリクエストを飛ばしたいです。
実際に動かしてみると、次のようにエラーが起きます。
http://localhost:8080/ruby-wasm-wasi/b.rb へリクエストを飛ばしています。
これは 相対パスの起点につねに browser.script.iife.js を使っているからです。 require_relativeの参照先を得るためには、require_relativeを実行するRubyスクリプトのURLを知っておく必要があります。
*1:そんな言葉があるかは知りません