ゲスト言語スクリプトに外部 JS コードをロードするために、GraalVM (Polyglot API) で requireJS を使用しようとしています。これについて私が行っている方法は、最初にコンテキストで requirejs を実行することです。
Context importCtx = Context.create();
String libraryUrl = "file:/require.js";
Source librarySource = Source.newBuilder("js", new URL(libraryUrl)).build();
importCtx.eval(librarySource);
これにより、require が JS グローバルに追加され、同じコンテキストで実行される次の JS スクリプトでそれを使用できるようになります。次に、ゲスト スクリプトを実行します。
String scriptUrl = "test.js";
Source scriptSource = Source.newBuilder("js", new URL(scriptUrl)).build();
importCtx.eval(scriptSource);
私のゲストスクリプトは次のようになります。
console.log("start of script");
require(['http://momentjs.com/downloads/moment.js'], function(mom) {
console.log("inside require function");
debugger;
console.log(mom.now();
});
debugger;
console.log("end of script");
このスクリプトをブラウザで実行すると、正しく動作し、moment.now() の値が出力されます。ただし、Polyglot API から実行すると、JS が実行され、require が正しく設定されますが、function(mom){} が呼び出されることはありません。基本的に、「require function 内」メッセージと moment.now() の値は表示されません。
これは、外部リソースの読み込み中にエラーが発生したために発生していると感じています (リモート URL の代わりにファイルを読み込もうとしましたが、うまくいきませんでした)。ただし、検査オプションを有効にしてchrome devtoolsを実行しても、エラーは表示されません。
何が問題なのですか?ありがとう。