Node.jsランタイム

GraalVMでは、未変更のNode.jsアプリケーションを実行できます。アプリケーションでは、NPMパッケージ(ネイティブ・パッケージを含む)を自由にインポートして使用できます。

nodeネイティブ・ランチャの実行とJavaコンテキストからのNode.js/npmモジュール/ECMAScriptモジュールへのアクセスの違いは、NodeJSVSJavaScriptContextを参照してください。

Node.jsコンポーネントのインストール

GraalVM 21.1以降、Node.jsサポートは別個のGraalVMコンポーネント内にパッケージ化されています。これはGraalVMアップデータを使用してインストールできます。

$GRAALVM/bin/gu install nodejs

これにより、nodeおよびnpmバイナリが$GRAALVM/binディレクトリにインストールされます。

Node.jsでのポリグロット・サポート

Node.jsコンポーネントは、インストールされている他のポリグロット言語とのポリグロット言語相互運用性(フラグ: --polyglot)を使用できます。JVMモード(フラグ: --JVM)では、この機能はデフォルトで使用可能です。Ruby言語へのポリグロット・アクセスには、たとえば次のコマンドを使用できます:

$GRAALVM/bin/node --jvm --polyglot -e 'var array = Polyglot.eval("ruby", "[1,2,42,4]"); console.log(array[2]);'

nodeのポリグロット機能をネイティブ・モード(フラグ: --native)で使用するには、まずlibpolyglotを再ビルドする必要があります。このためには、イメージを再ビルドする前に、まずnative-imageコンポーネントとその他の言語をインストールする必要があります:

$GRAALVM/bin/gu install native-image
$GRAALVM/bin/gu rebuild-images libpolyglot

正常に再ビルドされると、--nativeモードでもポリグロット・アクセスが使用可能になります:

$GRAALVM/bin/node --native --polyglot -e 'var array = Polyglot.eval("ruby", "[1,2,42,4]"); console.log(array[2]);'

Node.jsアプリケーションの実行

Node.jsベースのアプリケーションを実行するには、GraalVMディストリビューションのnodeランチャを使用します:

$GRAALVM_HOME/bin/node [options] [filename] [args]

GraalVMのNode.jsランタイムは、Node.jsの最新バージョンに基づいており、Google V8のかわりにGraalVM JavaScriptエンジンを実行します。したがって、一部の内部機能(VM内部統計、構成、プロファイリング、デバッグなど)はサポートされていないか、サポートされていたとしても動作が異なる可能性があります。

nodeコマンドはNode.jsとほぼ互換性があり、追加のGraalVM固有の機能(Javaおよび他のすべてのGraalVM言語との相互運用性など)を備えています。使用可能なオプションのリストは、node --helpを使用して取得できます。

npmを使用したパッケージのインストール

Node.jsパッケージをインストールするには、GraalVMの/binフォルダにあるnpmランチャを使用します。npmコマンドは、デフォルトのNPMコマンドと同等で、そのほとんどのオプションをサポートしています。

NPMパッケージは、次の方法でインストールできます:

$GRAALVM_HOME/bin/npm install <package>

GraalVMのnpmコマンドはNPMとほぼ互換性があるため、パッケージは想定どおりにnode_modulesフォルダにインストールされます。

npmパッケージのグローバル・インストール

ノード・パッケージは、npmおよび-gオプションを使用してグローバルにインストールできます。npmのデフォルト設定では、node実行可能ファイルがインストールされているパス(通常はNODE/bin)にグローバル・パッケージ(実行可能ファイルへのリンク)がインストールされます。GraalVMでは、GRAALVM/binnode実行可能ファイルがありますが、これはGRAALVM/jre/languages/js/binフォルダの実際の実行可能ファイルへのリンクにすぎません。このフォルダは、グローバル・パッケージがインストールされている場所です。グローバルにインストールされたパッケージ、特にそのコマンドライン・インタフェースを定期的に使用する場合は、必要に応じてそのディレクトリを$PATHに追加できます。

もう1つのオプションは、$PREFIX環境変数を設定するか、npm installの実行時に--prefixオプションを指定することで、npmのグローバル・インストール・フォルダを指定することです。たとえば、次のコマンドでは、/foo/barフォルダにグローバル・パッケージがインストールされます:

$GRAALVM_HOME/bin/npm install --prefix /foo/bar -g <package>

prefixの詳細は、NPMの公式ドキュメントを参照してください。