Node.js 20 のリリースノート
Node.js 20 LTS との使用
概要
はじめに リンクのコピーリンクがクリップボードにコピーされました!
リリース日: 2024-03-25
第1章 必要なインフラストラクチャーコンポーネントのバージョン リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Node.js を使用する場合は、次のインフラストラクチャーコンポーネントが必要です。サポート対象として明示的に指定されているコンポーネントを除き、Red Hat はこれらのコンポーネントのサポートを提供していません。
第2章 機能 リンクのコピーリンクがクリップボードにコピーされました!
このセクションには、Red Hat build of Node.js 20 リリースの機能変更に関する情報が含まれています。
2.1. 新機能および変更された機能 リンクのコピーリンクがクリップボードにコピーされました!
Node.js 20 LTS には、Red Hat build of Node.js がサポートする次の新機能と拡張機能があります。
Node.js 20 LTS の変更の詳細については、アップストリームコミュニティーの リリースノート と ドキュメント を参照してください。
2.1.1. v11.3 への V8 JavaScript エンジンのアップグレード リンクのコピーリンクがクリップボードにコピーされました!
このリリースには、Chromium 113 の一部である v11.3 への V8 JavaScript エンジンのアップグレードが含まれています。
アップグレードされた V8 JavaScript エンジンには、以下の新機能および機能拡張が含まれています。
V8 JavaScript エンジンで利用可能な変更の詳細については、V8 ブログ を参照してください。
2.1.2. テストランナーモジュールの完全サポート リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Node.js 20 は、実稼働環境で使用できる安定した機能としてテストランナーモジュールを提供します。以前のリリースでは、テストランナーモジュールは実験的な機能としてのみ利用可能でした。
テストランナーモジュールは、Jest や Mocha などの機能をすべて備えたテストフレームワークを置き換えることを目的としたものではありません。テストランナーモジュールを使用すると、追加の依存関係をインストールすることなく、テストスイートをすばやく簡単に作成して実行できます。
Red Hat build of Node.js 20 には、テストランナーモジュールに次の種類の機能強化が含まれています。
-
node --testフラグを使用して呼び出せるコマンドラインテストランナー -
--test-reporterフラグを使用して設定できるカスタムテストレポーター -
--experimental-test-coverageフラグで使用できる実験的なテストカバレッジ - モック機能
詳細は、Node.js Test Runner のドキュメント を参照してください。
2.1.3. 専用スレッドで実行されるカスタム ESM ローダーフック リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Node.js 20 では、ローダー (例: --experimental-loader=myhook.mjs) を通じて提供される ECMAScipt モジュール (ESM) フックは、メインのアプリケーションスレッドとは別の専用スレッドで実行されます。この機能強化により、ローダーに別のスコープが指定され、アプリケーションコードは潜在的な汚染から保護されます。
2.1.4. 同期 import.meta.resolve() 関数 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Node.js 20 では、import.meta.resolve() 関数は値を同期的に返します。ただし設定によっては、カスタムローダー resolve フックを同期関数または非同期関数として定義することもできます。非同期 resolve フックがロードされている場合でも、import.meta.resolve() 関数はアプリケーションコードに対して同期的に値を返します。
2.1.5. Web Crypto API による WebIDL コンバーターの使用 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Node.js 20 では、Web Crypto API は、Web Crypto API の他の実装と同様に、WebIDL 定義に基づき関数引数を強制および検証します。この機能強化により、Node.js と Web Crypto API のブラウザー実装間の相互運用性が向上します。
2.1.6. プロパティー import.meta.resolve は CLI フラグに対して非依存に リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Node.js 20 では、import.meta.resolve(specifier) プロパティーがデフォルトで --experimental-import-meta-resolve コマンドラインインターフェイス (CLI) フラグの使用に依存しなくなりました。現在は、import.meta.resolve(specifier) プロパティーを使用して、指定子文字列が解決される絶対文字列を取得できるようになりました。これは、CommonJS モジュールの require.resolve 機能に似ています。この機能強化により、Node.js をブラウザーやその他のサーバー側ランタイムと連携させることができます。
詳細は、Node.js import.meta.resolve のドキュメント を参照してください。
2.1.7. モジュールカスタマイズフックの module.register メソッド リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Node.js 20 は、node:module API の一部である新しい module.register(specifier[, parentURL][, options]) メソッドを提供します。この新しいメソッドを使用すると、モジュールカスタマイズフックをエクスポートするファイルを指定し、フックにデータを渡し、それらのフックとの通信チャネルを確立できます。この機能強化は、フックをエクスポートしたファイルの指定に --experimental-loader フラグを使用する必要があった以前のリリースの動作より優先されます。
アプリケーションコードが実行される前にカスタマイズフックが確実に登録されるようにするには、登録機能を使用するアプリケーションを実行するときに --import フラグを使用することを検討してください。
以下に例を示します。
node --import ./file-that-calls-register.js ./app.js
node --import ./file-that-calls-register.js ./app.js
詳細は、Node.js module.register のドキュメント を参照してください。
2.1.8. CommonJS モジュールでモジュールカスタマイズ load フックをサポート リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Node.js 20 では、モジュールカスタマイズフックの作成者は、load フックで ESM ソースと CommonJS ソースの両方を処理できます。この機能強化は、アプリケーションのメインエントリーポイントが ESM ローダーによって処理されるときに、import または require ステートメントを使用して参照される CommonJS モジュールで利用できます。たとえば、エントリーポイントが ESM ファイルである場合や、--import フラグを使用する場合、この機能強化が関連します。この機能を使用すると、パッケージ作成者は require.extensions などの非推奨の API に依存することなく追加の Node.js カスタマイズを実行できるため、Node.js 読み込みプロセスを容易にカスタマイズできます。
詳細は、Node.js Hooks: load ドキュメント を参照してください。
2.1.9. ストリームパフォーマンスの向上 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Node.js 20 は、読み取りおよび書き込み可能なストリームのパフォーマンスを高めます。この機能強化には、メモリーオーバーヘッドの削減、読み取り可能なストリームの async イテレーター消費の向上、読み取り可能なストリームの pipeTo 消費の向上などの改良が含まれています。
2.2. 非推奨の機能 リンクのコピーリンクがクリップボードにコピーされました!
以下の機能は、Red Hat build of Node.js 20 リリースで非推奨になりました。
このリリースで廃止または削除された機能の詳細については、nodejs.org の Web サイト を参照してください。
2.2.1. 無効なポートでの url.parse() メソッドのランタイム非推奨 リンクのコピーリンクがクリップボードにコピーされました!
このリリースには、無効なポートを含む url.parse() メソッド呼び出しのランタイム非推奨が含まれています。以前のリリースでは、url.parse() メソッドが数値以外のポート値を含む URL を受け入れていたため、予期しない入力によってホスト名のスプーフィングが発生する可能性がありました。このリリースでは、URL に数値以外のポート値が含まれている場合、url.parse() メソッドが警告を発します。
詳細は、Node.js url.parse のドキュメント を参照してください。
2.3. テクノロジープレビューの機能 リンクのコピーリンクがクリップボードにコピーされました!
以下の機能は、Node.js 20 LTS リリースのテクノロジープレビュー機能として利用できます。
2.3.1. 実験的な WASI 機能の強化 リンクのコピーリンクがクリップボードにコピーされました!
このリリースでは、実験的な WebAssembly System Interface (WASI) 機能に次の機能強化が適用されています。
-
WASI では、この機能を有効にするために
experimental-wasi-unstable-preview1コマンドラインインターフェイス (CLI) フラグを使用する必要がなくなりました。この機能強化により、WASI がさらに使いやすくなります。 -
WASI では、新しい
WASI()呼び出しに、特定の WASI バージョンを要求するversionオプションを含めることが必要になりました。Node.js はさまざまなバージョンの WASI をサポートしており、versionオプションにはデフォルト値がないため、アプリケーション内のすべての新しいWASI()呼び出しで特定のバージョンを要求する必要があります。そうしない場合、エラーが発生します。
詳細は、Node.js WebAssembly System Interface (WASI) のドキュメント を参照してください。
2.3.2. 権限モデル リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Node.js 20 では、実験的な権限モデル機能が導入されています。開発者はこの機能を使用して、プログラム実行中にファイルシステム操作、子プロセスの生成、ワーカースレッドの作成などでの特定リソースへのアクセスを制限できます。つまり、アプリケーションによる機密データへのアクセス、機密データの変更、有害な可能性のあるコードの実行などを防止できます。
権限モデル機能は、--experimental-permission CLI フラグを使用して有効にできます。この機能を有効にすると、利用可能なすべての権限へのアクセスが自動的に制限されます。
権限を管理するには、次の CLI フラグを使用できます。
-
ファイルシステムの権限を管理するには、
--allow-fs-readフラグと--allow-fs-writeフラグを使用します。 -
子プロセスの権限を管理するには、
--allow-child-processフラグを使用します。 -
ワーカースレッドの権限を管理するには、
--allow-workerフラグを使用します。
詳細は、Node.js 権限モデルのドキュメント を参照してください。
2.3.3. トレーシングチャネル リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Node.js 20 では、Diagnostics Channel 機能の実験的なエクステンションとして TracingChannel クラスが導入されています。トレーシングチャネルは、1 つのトレース可能アクションの実行ライフサイクルにおけるさまざまなポイントを表す複数の診断チャネルをグループ化し、トレースデータを生成して使用するために使用できます。つまりトレーシングチャネルは、アプリケーションフローをトレースするイベントを生成するプロセスを形式化し、簡素化するのに役立ちます。
詳細は、Node.js TracingChannel のドキュメント を参照してください。
2.3.4. Mock Timers リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Node.js 20 には、実験的な Mock Timers 機能が導入されています。開発者はこの機能を使用して、タイマーに依存する機能に対し、より予測可能で信頼性の高いテストを記述できます。タイマーのモッキングは、指定された間隔を待たずにタイマーの動作をシミュレートおよびテストするためによく使用される手法です。Mock Timers 機能には、グローバルオブジェクトと、node:timers API および node:timers/promises API からの、setTimeout() メソッドおよび setInterval() メソッドの呼び出しをシミュレートできる MockTimers クラスが含まれています。
Mock Timers 機能は、時間を進めたり、特定のタイマーを有効にしたり、すべてのタイマーを解放したりするためのシンプルな API を提供します。
以下に例を示します。
詳細は、Node.js Mocking: Timers ドキュメント を参照してください。
2.3.5. ビルトイン .env ファイルのサポート リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Node.js 20 では、起動時に Node.js アプリケーションに渡される .env ファイルで環境変数を設定するための実験的な機能が導入されています。.ini ファイル形式と同様に、.env 設定ファイルの各行には、特定の環境変数のキーと値のペアが含まれています。以下に例を示します。
PASSWORD=nodejs
PASSWORD=nodejs
--env-file フラグを使用すると、事前に定義された環境変数を使用して Node.js アプリケーションを初期化および実行できます。以下に例を示します。
node --env-file=myconfig.env myapp.js
node --env-file=myconfig.env myapp.js
前述の例のようにアプリケーションを初期化すると、process.env プロパティーを使用して関連する環境変数にアクセスできます。たとえば、PASSWORD=node.js 環境変数にアクセスするには、process.env.PASSWORD プロパティーを使用できます。
この機能強化により、.env 設定ファイルで NODE_OPTIONS 環境変数を定義できるようになり、package.json ファイルに NODE_OPTIONS を含める必要がなくなります。
2.4. サポート対象のアーキテクチャー リンクのコピーリンクがクリップボードにコピーされました!
Node.js ビルダーイメージおよび RPM パッケージが利用可能で、以下の CPU アーキテクチャーとの使用がサポートされます。
- AMD x86_64
- ARM64
- OpenShift 環境の IBM Z (s390x)
- OpenShift 環境の IBM Power System (ppc64le)
第3章 リリースコンポーネント リンクのコピーリンクがクリップボードにコピーされました!
- Node.js 20 Builder Image for RHEL 8
- Node.js 20 Universal Base Image 8
- Node.js 20 Minimal Stand-alone Image for RHEL 8
- Node.js 20 Minimal Universal Base Image 8
- Node.js 20 Builder Image for RHEL 9
- Node.js 20 Universal Base Image 9
- Node.js 20 Minimal Stand-alone Image for RHEL 9
- Node.js 20 Minimal Universal Base Image 9
第4章 修正された問題 リンクのコピーリンクがクリップボードにコピーされました!
このリリースには、Node.js 20 LTS のコミュニティーリリースでの問題修正がすべて組み込まれています。
4.1. 仮想マシンモジュール API のメモリー管理を強化 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Node.js 20 は、importModuleDynamically オプションをサポートする以下の仮想マシンモジュール API に長年存在していたメモリーリークと解放後の使用に関する問題を解決します。
- vm.Script
- vm.compileFunction
- vm.SyntheticModule
- vm.SourceTextModule
この機能強化により、影響を受けるユーザーは、Red Hat build of Node.js の以前のバージョンからアップグレードできるようになります。
第5章 既知の問題 リンクのコピーリンクがクリップボードにコピーされました!
本リリースに影響する既知の問題はありません。
第6章 必要なインフラストラクチャーコンポーネントに影響する既知の問題 リンクのコピーリンクがクリップボードにコピーされました!
次の問題は、このリリースに必要なインフラストラクチャーコンポーネントに影響することがわかっています。
6.1. Node.js パッケージマネージャーがシグナルを正しく処理しない リンクのコピーリンクがクリップボードにコピーされました!
- 説明
-
Red Hat build of Node.js 20 では、Node.js パッケージマネージャー (
npm) が子プロセスにシグナルを送信しません。この問題は、Node.js アプリケーションが正しくシャットダウンできないことを意味します。 - 原因
-
npm9.6.7 以降のバージョンには、npmはSIGINTおよびSIGTERMシグナルを子プロセスに転送できないという問題があります。この問題は、npm9.6.7 以降の使用を必要とする Node.js バージョンに影響します。Node.js コミュニティーは、このnpmの問題に対する修正を調査しています。 - 回避策
- 現在、回避策はありません。Red Hat は、Red Hat build of Node.js 20 でこの問題に対する修正を調査しています。