オプション
GraalVMでのJavaScriptの実行は、いくつかのオプションを使用して構成できます。
GraalVM JavaScriptランチャのオプション
これらのオプションは、jsランチャの動作を制御するためのものです:
-e、--eval CODE: JavaScriptソース・コードを評価し、エンジンを終了します。js -e 'print(1+2);'-f、--file FILE: 指定したスクリプト・ファイルをロードして実行します。-fフラグはオプションであり、大抵は省略できます。jsに対する追加の引数はいずれもファイルとして解釈されるためです。js -f myfile.js--module FILE: 指定されたモジュール・ファイルをロードして実行します。.mjsファイルは、デフォルトでモジュールとして扱われます。js --module myfile.mjs--version: GraalVM JavaScriptのバージョン情報を出力して終了します。--strict: JavaScriptの厳密モードでエンジンを実行します。
GraalVM JavaScriptエンジンのオプション
GraalVM JavaScriptエンジンの動作を構成するためのオプションがいくつかあります。これらのオプションは、エンジンの起動方法に応じて、ランチャに渡すか、プログラムを使用して渡します。
JavaScriptエンジンのオプションの完全なリストの場合、--help:jsフラグをjsランチャに渡します(GraalVM 22.1から使用可能で、これより前のリリースでは--help:languagesを使用します)。内部オプションを含めるには、--help:js:internalを使用します。これらのリストには、安定した、サポートされているオプションと試験段階のオプションの両方が含まれていることに注意してください。
ランチャへのオプションの指定
ランチャには、--js.<option-name>=<value>を使用してオプションを渡します:
js --js.ecmascript-version=2015
コンテキストAPIを使用したプログラムによるオプションの指定
GraalVMのポリグロットAPIを使用してJavaから起動する場合、オプションはプログラムによってContextオブジェクトに渡されます:
Context context = Context.newBuilder("js")
.option("js.ecmascript-version", "2015")
.build();
context.eval("js", "42");
プログラムでオプションを設定する方法の詳細は、「ポリグロット・プログラミング」リファレンスを参照してください。
安定オプションと試験段階のオプション
使用可能なオプションは、安定オプションと試験段階のオプションに区別されます。試験段階のオプションを使用する場合は、事前に特別なフラグを指定する必要があります。
ネイティブ・ランチャ(jsおよびnode)では、すべての試験段階のオプションを使用する前に--experimental-optionsを渡す必要があります。Contextを使用する場合は、Context.BuilderでオプションallowExperimentalOptions(true)をコールする必要があります。ScriptEngineでの試験段階のオプションの使用方法は、「ScriptEngine実装」を参照してください。
よく使用される安定したオプション
よく使用される安定したオプションは次のとおりです:
--js.ecmascript-version: 特定のECMAScriptバージョンをエミュレートします。整数値(5、6など、2015-2022)、"latest"(完了した提案を含むサポートされる仕様の最新バージョン)、または"staging"(サポートされる未完了の提案を含む最新バージョン)、デフォルトは"latest"です。--js.foreign-object-prototype: JavaScript独自の型(外部配列、オブジェクトおよび関数)を模倣する外部オブジェクトにJavaScriptのデフォルト・プロトタイプを渡します。ブール値であり、デフォルトはtrueです。--js.intl-402: ECMAScript国際化APIを有効にします。ブール値であり、デフォルトはtrueです。--js.regexp-static-result:RegExp.$1(レガシー)など、最後に成功した一致の結果を含む静的なRegExpプロパティを渡します。ブール値であり、デフォルトはtrueです。--js.strict: すべてのスクリプトに対して厳密モードを有効にします。ブール値であり、デフォルトはfalseです。--js.console:consoleグローバル・プロパティを有効にします。ブール値であり、デフォルトはtrueです。--js.allow-eval:eval()やFunctionコンストラクタなどを使用して、文字列からコードを生成できます。ブール値であり、デフォルトはtrueです。--js.timer-resolution:Date.now()やperformance.now()などのタイミング関数の解決をナノ秒単位で設定します。デフォルト:1000000(1ミリ秒)。--js.unhandled-rejections: 未処理の回答拒否トラッキングを構成します。指定できる値は、none(デフォルト、トラッキングなし)、warn(stderrへの警告の出力)、throw(例外のスロー)、およびhandler(カスタム・ハンドラの起動)です。
完全なリストの場合は、js --help:js:internalを使用します
ECMAScriptバージョン
このオプションは、ECMAScript仕様の特定のバージョンとの互換性を確保するためのものです。整数値が想定されており、エディション番号(5、6、…)と公開年(2015以降)の両方がサポートされています。GraalVM 21.2では、latest、stagingもサポートされています。GraalVM 23.1のデフォルトはECMAScript 2023仕様です。GraalVM JavaScriptには、将来のドラフト仕様およびオープンな提案の一部の機能が実装されています(そのバージョンを明示的に選択したり、特定の試験段階フラグを有効にした場合)。本番設定では、ecmascript-versionを、リリースされたファイナライズ済バージョンの仕様(2022など)に設定することをお薦めします。
使用可能なバージョンは次のとおりです:
- ECMAScript 5.xを表す
5 - ECMAScript 2015を表す
2015(または6) - ECMAScript 2016を表す
2016(または7) - ECMAScript 2017を表す
2017(または8) - ECMAScript 2018を表す
2018(または9) - ECMAScript 2019を表す
2019(または10) - ECMAScript 2020を表す
2020(または11) - ECMAScript 2021を表す
2021(または12) (21.3のデフォルト) - ECMAScript 2022を表す
2022(または13) (22.0+のデフォルト) - ECMAScript 2023を表す
2023(または14) (23.1のデフォルト) latest: サポートされる最新言語バージョンに対応します(デフォルト・バージョン)staging: 試験段階の不安定で未完了の提案を含め、サポートされる最新言語機能に対応します(本番では使用しないでください)
intl-402
このオプションを使用すると、ECMAScriptの国際化APIが有効になります。ブール値が想定されており、デフォルトはtrueです。
厳密モード
このオプションを使用すると、すべてのスクリプトに対してJavaScriptの厳密モードが有効になります。ブール値が想定されており、デフォルトはfalseです。
よく使用される試験段階のオプション
これらのオプションは試験段階であり、今後の保守またはサポートは保証されていないことに注意してください。これらを使用するには、--experimental-optionsフラグを必須とするか、または試験段階のオプションをコンテキストで有効にする必要があります(前述を参照)。
--js.nashorn-compat: Nashornエンジンとの互換性モードを提供します。デフォルトでは、ECMAScriptバージョンを5に設定します。新しいECMAScriptバージョンと競合する可能性があります。ブール値であり、デフォルトはfalseです。--js.timezone: ローカル・タイム・ゾーンを設定します。文字列値であり、デフォルトはシステム・デフォルトです。--js.v8-compat: GoogleのV8エンジンとの互換性を高めます。ブール値であり、デフォルトはfalseです。--js.esm-eval-returns-exports: ESモジュールSourceのcontext.evalは、エクスポートされたシンボルを返します。--js.temporal:TemporalAPIを有効にします。--js.webassembly:WebAssemblyAPIを有効にします。