- 最初のスクリプトは3つのステップです:登録、イベントのフック、スクリプトフォルダへの保存。
- ホストはGraalVMをバンドルしているので、実際のJavaScriptを記述するだけで、自分でインストールする必要はありません。
- スクリプトはJavaの再ビルドなしに、数秒でホットリロードされます。
- スクリプトは、ホストがhost-accessホワイトリストを通じて公開するオブジェクトのみを呼び出すことができます.
GraalVM JavaScript スクリプトを初めて書くということは、3つの小さなステップを踏むことを意味します。まず、スクリプトをホストのエントリポイントに登録し、次に、イベントやモジュールにアタッチし、最後に、エンジンがロードできるようにスクリプトフォルダに保存します。エンジンは GraalVM のポリグロット API で動作するため、スクリプトはそのままの JavaScript であり、Java を再コンパイルすることなくリロードされます.
どこ Opal 合う
まずに必要なこと
エンジンを埋め込むホストプログラム。ホストはGraalVM JavaScriptを同梱し、スクリプトから呼び出せるオブジェクト群を公開し、スクリプトフォルダを監視します。GraalVMを個別にインストールする必要はありません。ホストに同梱されています。ホストから渡されるオブジェクトに対して、プレーンなJavaScriptを書きます。
それらのオブジェクトが何に対応しているかを知っておくと役立ちますが、Javaを書く必要はありません。
3つのステップ
スクリプトフォルダを見つけてください
スクリプトファイルを作成する
.js (または .mjs) ファイルを作成してください。ホストは次にスクリプトをロードするときにそれを認識します登録とフック
最小限の例
ほとんどのホストは、自身を登録するためのエントリポイントを1つと、JavaScriptとプログラムを繋ぐためのプロキシオブジェクトをいくつか提供します。正確な名前はホストによって異なりますが、構造は同じです。最初のスクリプトは通常、自身を宣言し、1つのイベントに反応するだけです。
// Register the script with the host (names vary by host).
script.register({
name: "hello-world",
version: "1.0.0",
});
// React to an event the host exposes.
script.on("enable", () => {
client.print("Hello from my first script.");
});ホスト自身のAPIリファレンスで、実際のオブジェクト名とメソッド名を確認してください。重要なのはパターンです。登録し、次にイベントをフックするか、モジュールを定義します
作業中にホットリロード
ファイルを保存し、スクリプトをリロードしてください(ライブリロードをサポートしていない場合は、ホストを再起動します)。変更は再ビルドなしで有効になります。この高速なループが、modをコンパイルする代わりにスクリプトを使用する主な理由です。スクリプトは数秒でリロードされますが、コンパイルされたmodは再構築と再起動が必要です。
| アプローチ | イテレーションループ | 言語 | 適用場面 |
|---|---|---|---|
| GraalVM JavaScriptスクリプト | 編集、保存、リロード | JavaScript | 簡単な修正、カスタム動作 |
| コンパイルされたmod | 再構築、再起動 | JavaまたはKotlin | 大きな機能、より深いフック |
スクリプトでできること、できないこと
スクリプトは、ホストが公開するオブジェクトに対してのみ呼び出しを行うことができ、それ以外のオブジェクトにはアクセスできません。ホストは、GraalVM Polyglot ホストアクセスホワイトリストを通じて、スクリプトがアクセスできるクラスとメソッドを宣言し、デフォルトでは拒否されます。これにより、スクリプトは安全かつ予測可能です。アクセスしたいオブジェクトが公開されていない場合は、ホストが追加する必要があります。スクリプト側からホワイトリストを迂回することはできません。
よくある質問
いいえ。ホストプログラムに GraalVM と JavaScript エンジンが同梱されています。JavaScript ファイルを作成し、スクリプトフォルダにドロップするだけです。
はい。エンジンは最新のECMAScriptの機能に対応しており、importとexportを使用したモジュールもサポートしているため、古いサブセットに縛られることはありません。
ファイルがホストのスクリプトフォルダに存在すること、ホストが期待する拡張子であること、そしてホストのエントリーポイントに自身を登録していることを確認してください。通常、登録呼び出しのタイプミスが原因です。
いいえ。エンジンはホストJVM内に組み込まれているため、スクリプトはスタンドアロンのNode.jsランタイムではなく、ホストプログラムと通信します。