Node.jsランタイム
GraalVMでは、未変更のNode.jsアプリケーションを実行できます。アプリケーションでは、NPMパッケージ(ネイティブ・パッケージを含む)を自由にインポートして使用できます。
node
ネイティブ・ランチャの実行とJavaコンテキストからのNode.js/npmモジュール/ECMAScriptモジュールへのアクセスの違いは、NodeJSVSJavaScriptContextを参照してください。
Node.jsコンポーネントのインストール
GraalVM 21.1以降、Node.jsサポートは別個のGraalVMコンポーネント内にパッケージ化されています。これはGraalVMアップデータを使用してインストールできます。
$JAVA_HOME/bin/gu install nodejs
これにより、node
およびnpm
バイナリが$JAVA_HOME/bin
ディレクトリにインストールされます。
Node.jsでのポリグロット・サポート
Node.jsコンポーネントは、インストールされている他のポリグロット言語とのポリグロット言語相互運用性(フラグ: --polyglot
)を使用できます。JVMモード(フラグ: --JVM
)では、この機能はデフォルトで使用可能です。Ruby言語へのポリグロット・アクセスには、たとえば次のコマンドを使用できます:
$JAVA_HOME/bin/node --jvm --polyglot -e 'var array = Polyglot.eval("ruby", "[1,2,42,4]"); console.log(array[2]);'
node
のポリグロット機能をネイティブ・モード(フラグ: --native
)で使用するには、まずlibpolyglot
を再ビルドする必要があります。このためには、イメージを再ビルドする前に、まずnative-image
コンポーネントとその他の言語をインストールする必要があります:
$JAVA_HOME/bin/gu install native-image
$JAVA_HOME/bin/gu rebuild-images libpolyglot
正常に再ビルドされると、--native
モードでもポリグロット・アクセスが使用可能になります:
$JAVA_HOME/bin/node --native --polyglot -e 'var array = Polyglot.eval("ruby", "[1,2,42,4]"); console.log(array[2]);'
Node.jsアプリケーションの実行
Node.jsベースのアプリケーションを実行するには、GraalVMディストリビューションのnode
ランチャを使用します:
$JAVA_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パッケージは、次の方法でインストールできます:
$JAVA_HOME/bin/npm install <package>
GraalVMのnpm
コマンドはNPMとほぼ互換性があるため、パッケージは想定どおりにnode_modules
フォルダにインストールされます。
npm
パッケージのグローバル・インストール
ノード・パッケージは、npm
および-g
オプションを使用してグローバルにインストールできます。npm
のデフォルト設定では、node
実行可能ファイルがインストールされているパス(通常はNODE/bin
)にグローバル・パッケージ(実行可能ファイルへのリンク)がインストールされます。GraalVMでは、JAVA_HOME/bin
にnode
実行可能ファイルがありますが、これはJAVA_HOME/jre/languages/js/bin
フォルダの実際の実行可能ファイルへの単なるリンクです。このフォルダは、グローバル・パッケージがインストールされている場所です。グローバルにインストールされたパッケージ、特にそのコマンドライン・インタフェースを定期的に使用する場合は、必要に応じてそのディレクトリを$PATH
に追加できます。
もう1つのオプションは、$PREFIX
環境変数を設定するか、npm install
の実行時に--prefix
オプションを指定することで、npm
のグローバル・インストール・フォルダを指定することです。たとえば、次のコマンドでは、/foo/bar
フォルダにグローバル・パッケージがインストールされます:
$JAVA_HOME/bin/npm install --prefix /foo/bar -g <package>
prefix
の詳細は、NPMの公式ドキュメントを参照してください。