オプション

GraalVMでのJavaScriptの実行は、いくつかのオプションで構成できます。

これらのオプションは、jsランチャーの動作を制御するためのものです。

  • -e, --eval <code>: JavaScriptソースコードを実行し、エンジンを終了します。
     js -e 'print(1+2);'
    
  • -f, --file <arg>: 指定されたスクリプトファイルを読み込んで実行します。-fオプションは省略可能で、ほとんどの場合、jsへの追加引数はファイルとして解釈されるため省略できます。
     js -f myfile.js
    
  • --module <arg>: 指定されたモジュールファイルを読み込んで実行します。*.mjsファイルはデフォルトでモジュールとして扱われます。
     js --module myfile.mjs
    
  • --version: GraalJSのバージョン情報を表示して終了します。
  • --strict: エンジンをJavaScriptの厳格モードで実行します。

GraalJSエンジンオプション #

GraalJSの動作を構成するためのいくつかのオプションがあります。エンジンの起動方法に応じて、オプションはランチャーに渡すか、プログラムで渡すことができます。

JavaScriptエンジンのオプションの完全なリストについては、jsランチャーに--help:jsフラグを渡してください(GraalVM 22.1以降で使用可能、それ以前のリリースでは--help:languagesを使用)。内部オプションを含めるには、--help:js:internalを使用します。これらのリストには、安定版、サポート版、実験版のオプションが含まれていることに注意してください。

コマンドラインでのオプションの渡し方 #

jsランチャーにオプションを渡すには、--js.<option-name>=<value>構文を使用します。例:

js --js.ecmascript-version=2015

Context APIを使用したプログラムによるオプションの渡し方 #

GraalVMのPolyglot APIを使用してJavaに埋め込まれている場合、オプションはContextオブジェクトにプログラムで渡すことができます。

Context context = Context.newBuilder("js")
                         .option("js.ecmascript-version", "2015")
                         .build();
context.eval("js", "42");

オプションをプログラムで設定する方法については、Polyglotプログラミングのリファレンスを参照してください。

安定版と実験版のオプション #

使用可能なオプションは、安定版と実験版のオプションに分類されます。実験版オプションを使用する場合は、事前に追加のオプションを指定する必要があります。

jsランチャーを使用する場合は、すべての実験版オプションの前に--experimental-optionsを渡す必要があります。Contextを使用する場合は、Context.BuilderallowExperimentalOptions(true)を呼び出す必要があります。ScriptEngineで実験版オプションを使用する方法については、ScriptEngineの実装を参照してください。

頻繁に使用される安定版オプション #

次の安定版オプションは、頻繁に関連します。

  • --js.ecmascript-version: 特定のECMAScriptバージョンをエミュレートします。整数値(56など、20152022)、"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: 未処理のPromise拒否の追跡を構成します。許容される値は、none(デフォルト、追跡なし)、warn(警告をstderrに出力)、throw(例外をスロー)、handler(カスタムハンドラーを呼び出す)です。
  • --js.esm-eval-returns-exports: ESモジュールのSourcecontext.evalは、エクスポートされたシンボルを返します。

完全なリストについては、js --help:js:internalを使用してください。

ECMAScriptバージョン

--js.ecmascript-versionオプションは、特定のバージョンのECMAScript仕様との互換性を提供します。エディション番号(56…)と発行年(2015から)の両方がサポートされている整数値を期待します。GraalVM 21.2以降、lateststagingもサポートされています。GraalVM 23.1のデフォルトはECMAScript 2023仕様です。GraalJSは、そのバージョンを明示的に選択し、特定の実験的オプションを有効にした場合、将来のドラフト仕様とオープンな提案のいくつかの機能を実装します。本番環境では、ecmascript-versionをリリース済みの最終的な仕様バージョン(例えば、2022)に設定することをお勧めします。

使用可能なバージョンは次のとおりです。

  • 5: ECMAScript 5.x
  • 2015(または6): ECMAScript 2015
  • 2016(または7): ECMAScript 2016
  • 2017(または8): ECMAScript 2017
  • 2018(または9): ECMAScript 2018
  • 2019(または10): ECMAScript 2019
  • 2020(または11): ECMAScript 2020
  • 2021(または12): ECMAScript 2021(21.3でのデフォルト
  • 2022(または13): ECMAScript 2022(22.0以降でのデフォルト
  • 2023(または14): ECMAScript 2023(23.1でのデフォルト
  • 2024(または15): ECMAScript 2024(24.1でのデフォルト
  • latest: 最新のサポートされている言語バージョン(デフォルトバージョン)
  • staging: 実験的な不安定な、未完成の提案を含む、最新のサポートされている言語機能(本番環境では使用しないでください!

intl-402

--js.intl-402オプションは、ECMAScriptの国際化APIを有効にします。ブール値を期待し、デフォルトはtrueです。

厳格モード

--js.strictオプションは、すべてのスクリプトでJavaScriptの厳格モードを有効にします。ブール値を期待し、デフォルトはfalse`です。

頻繁に使用される実験版オプション #

これらのオプションは実験的なものであり、将来維持される、または利用可能であることが保証されているわけではないことに注意してください。これらを使用するには、事前に--experimental-optionsオプションが必要です。

これらは頻繁に使用される実験的なオプションです。

  • --js.nashorn-compat: Nashornエンジンとの互換性モードを提供します。デフォルトでECMAScriptバージョンを5に設定します。新しいECMAScriptバージョンと競合する可能性があります。ブール値、デフォルトはfalseです。
  • --js.timezone: ローカルタイムゾーンを設定します。文字列値、デフォルトはシステムデフォルトです。
  • --js.v8-compat: GoogleのV8エンジンとの互換性を向上させます。ブール値、デフォルトはfalseです。
  • --js.temporal: Temporal APIを有効にします。
  • --js.webassembly: WebAssembly APIを有効にします。

お問い合わせ