1

ゲスト言語スクリプトに外部 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を実行しても、エラーは表示されません。

何が問題なのですか?ありがとう。

4

1 に答える 1