Node.js 18 のリリースノート
はじめに リンクのコピーリンクがクリップボードにコピーされました!
リリース日: 2023-01-31
第1章 必要なインフラストラクチャーコンポーネントのバージョン リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Node.js を使用する場合は、次のインフラストラクチャーコンポーネントが必要です。サポート対象として明示的に指定されているコンポーネントを除き、Red Hat はこれらのコンポーネントのサポートを提供していません。
第2章 機能 リンクのコピーリンクがクリップボードにコピーされました!
このセクションには、Red Hat build of Node.js 18 リリースで導入された機能の変更に関する情報が含まれています。
2.1. 新機能および変更された機能 リンクのコピーリンクがクリップボードにコピーされました!
Node.js 18 LTS には、Red Hat build of Node.js がサポートする次の新機能と拡張機能があります。
Node.js 18 LTS の変更の詳細は、アップストリームのリリースノート および アップストリームのドキュメンテーション を参照してください。
2.1.1. v10.2 への V8 JavaScript エンジンのアップグレード リンクのコピーリンクがクリップボードにコピーされました!
このリリースには、Chromium 101 の一部である v10.2 への V8 JavaScript エンジンのアップグレードが含まれています。
アップグレードされた V8 JavaScript エンジンには、以下の新機能および機能拡張が含まれています。
-
findLast()およびfindLastIndex()配列メソッド -
Intl.LocaleAPI の改良 -
Intl.supportedValuesOf関数 - クラスフィールド と プライベートクラスメソッド のパフォーマンスが向上し、通常のプロパティーストアと同じ速度で初期化されるようになりました。
V8 JavaScript エンジンで利用可能な変更の詳細については、V8 ブログ を参照してください。
2.1.2. HTTP タイムアウトのデフォルト値 リンクのコピーリンクがクリップボードにコピーされました!
本リリースには、HTTP タイムアウトの以下の拡張機能が含まれます。
-
パーサーが HTTP ヘッダー全体を受信するまで待機する時間を制限する
server.headersTimeoutプロパティーのデフォルト値が60000ミリ秒 (60 秒) になりました。 -
サーバーがクライアントからの要求全体を受信するまで待機する時間を制限する
server.requestTimeoutプロパティーのデフォルト値が300000ミリ秒 (5 分) になりました。
これらのタイムアウトが期限切れになると、サーバーは 408 エラーで応答し、要求を要求リスナーに転送せずに接続を閉じます。
リバースプロキシーがサーバーの前にデプロイされていない状況でサービス拒否攻撃を防止するには、これらのタイムアウト値をゼロ以外の値に設定してください。
2.1.3. グローバルスコープの Blob および BroadcastChannel API リンクのコピーリンクがクリップボードにコピーされました!
次の API が完全にサポートされ、グローバルオブジェクトとして使用できるようになりました。
-
Blobクラスは、複数のワーカースレッド間で安全に共有できる不変の生データをカプセル化します。Blobは、Bufferクラスのサブクラスです。 -
BroadcastChannelクラスは、同じチャネル名にバインドされている他のすべてのBroadcastChannelインスタンスとの非同期の 1 対多通信を有効にします。BroadcastChannelはEventTargetクラスを拡張します。
以前のリリースでは、これらの API はテクノロジープレビュー機能のみでした。
2.2. 非推奨の機能 リンクのコピーリンクがクリップボードにコピーされました!
以下の機能は、Red Hat build of Node.js 18 リリースで非推奨になりました。
このリリースで廃止または削除された機能の詳細は、nodejs.org の Web サイト を参照してください。
2.2.1. ファイルの書き込みまたは追加のための fs メソッドでの文字列強制のランタイムの非推奨 リンクのコピーリンクがクリップボードにコピーされました!
このリリースには、次のいずれかのメソッドでパラメーターとして渡される独自の toString プロパティーがオブジェクトにある場合の暗黙的なオブジェクトから文字列への強制のランタイムの非推奨が含まれています。
-
fs.write() -
fs.writeFile() -
fs.appendFile() -
fs.writeFileSync() -
fs.appendFileSync()
文字列強制の代わりに、オブジェクトをプリミティブ文字列に変換します。
2.2.2. dns.lookup および dnsPromises.lookup メソッドでのオプションタイプ強制 リンクのコピーリンクがクリップボードにコピーされました!
このリリースでは、dns.lookup() および dnsPromises.lookup() メソッドでパラメーターとして渡されるオプションタイプの強制が削除されます。次のオプションタイプと値の組み合わせのいずれかを使用すると、Node.js は ERR_INVALID_ARG_TYPE エラーを出力するようになりました。
-
familyオプションの null 以外の非整数値 -
hintsオプションの null 以外の非数値 -
allオプションの null 以外の非ブール値 -
verbatimオプションの null 以外の非ブール値
2.2.3. multipleResolves のランタイムの非推奨 リンクのコピーリンクがクリップボードにコピーされました!
このリリースには、multipleResolves プロセスイベントのランタイムの非推奨が含まれています。以下に例を示します。
process.on('multipleResolves', handler)
multipleResolves イベントは、V8 プロミスコンビネーターでは機能しませんでした。これは、Promise コンストラクターを使用する際の潜在的なエラーを追跡する際のこのイベントの有用性と信頼性に影響を与えました。たとえば、Promise.race() メソッドは、multipleResolves イベントをトリガーすることもできましたが、このイベントは、必ずしもエラーを示すわけではありませんでした。
2.2.4. thenable オブジェクトのサポート リンクのコピーリンクがクリップボードにコピーされました!
このリリースでは、ストリーム実装メソッドで thenable オブジェクトを返す機能が削除されました。たとえば、ユーザーが関数をコールバックスタイルで実装し、async メソッドを使用した場合に thenable オブジェクトを使用すると、予期しない問題が発生する可能性があります。このタイプの実装では、プロミスとコールバックのセマンティクスが無効に混在する結果になりました。
以下に例を示します。
const w = new Writable({
async final(callback) {
await someOp();
callback();
},
});
thenable オブジェクトの代わりに、コールバックを使用し、ストリーム実装メソッドに async 関数を使用しないようにします。
2.2.5. tls.parseCertString() リンクのコピーリンクがクリップボードにコピーされました!
このリリースでは、証明書のサブジェクトと発行者の文字列を解析するパーサーヘルパーであった tls.parseCertString() メソッドが削除されています。tls.parseCertString() メソッドは、複数値の相対識別名 (RDN) を正しく処理しなかったため、誤った表現やセキュリティーの問題が発生する可能性がありました。
さらに、_tls_common.translatePeerCertificate は、サブジェクトと発行者のプロパティーを変換しなくなりました。
Node.js の以前のリリースでは、tls.parseCertString() の代わりに querystring.parse() メソッドを使用することが推奨されていました。ただし、querystring.parse() もすべての証明書サブジェクトを正しく処理できないため、このリリースでは代替手段として querystring.parse() を使用することは推奨されなくなりました。
2.3. テクノロジープレビューの機能 リンクのコピーリンクがクリップボードにコピーされました!
以下の機能は、Node.js 18 LTS リリースのテクノロジープレビュー機能として利用できます。
2.3.1. Fetch API リンクのコピーリンクがクリップボードにコピーされました!
実験的な fetch API がグローバルオブジェクトとして利用できます。fetch API は、Node.js の HTTP/1.1 クライアントである Undici と、Fetch Web API の Node.js 実装を提供する node-fetch モジュールに基づいています。
以下に例を示します。
const res = await fetch('https://nodejs.org/api/documentation.json');
if (res.ok) {
const data = await res.json();
console.log(data);
}
この機能強化により、次のグローバルオブジェクトを使用できるようになりました。
-
fetch(ブラウザー互換バージョンのfetch()関数) -
FormData(FormDataインターフェイスのブラウザー互換バージョン) -
Headers(Headersインターフェイスのブラウザー互換バージョン) -
Request(Requestインターフェイスのブラウザー互換バージョン) -
Response(Responseインターフェイスのブラウザー互換バージョン)
--no-experimental-fetch コマンドラインオプションを使用して、fetch API を無効にできます。
2.3.2. グローバルスコープの Web Streams API リンクのコピーリンクがクリップボードにコピーされました!
Web Streams API は、Red Hat build of Node.js 16 リリースでテクノロジープレビュー機能として導入されました。このリリースでは、Node.js はグローバルスコープで Web Streams API を公開するようになりました。これは、stream/web コアモジュールを使用してのみ Web Streams API にアクセスできた以前のリリースの動作に優先されます。
この機能強化により、次の API をグローバルオブジェクトとして使用できるようになりました。
ReadableStream、ReadableStreamDefaultReader、ReadableStreamBYOBReader、ReadableStreamBYOBRequest、ReadableByteStreamController、ReadableStreamDefaultController、TransformStream、TransformStreamDefaultController、WritableStream、WritableStreamDefaultWriter、WritableStreamDefaultController、ByteLengthQueuingStrategy、CountQueuingStrategy、TextEncoderStream、TextDecoderStream、CompressionStream、DecompressionStream
2.3.3. ESM Loader Hooks API による複数のカスタムローダーのサポート リンクのコピーリンクがクリップボードにコピーされました!
ESM ローダーフック API は、Red Hat build of Node.js 16 リリースでテクノロジープレビュー機能として導入されました。ESM Loader Hooks API は、複数のカスタムローダーをサポートするようになりました。
複数のローダーが連携できるようにするために、この機能は チェーン と呼ばれるプロセスを使用します。これはプロミスチェーンに似ています。 たとえば、first-loader は second-loader を呼び出し、second-loader は third-loader を呼び出します。
カスタムローダーがチェーン内の次のローダーを意図的に呼び出さない場合、カスタムローダーは短絡を通知する必要があります。
詳細は、Node.js ECMAScript モジュールのドキュメント を参照してください。
2.3.4. ウォッチモード リンクのコピーリンクがクリップボードにコピーされました!
node --watch オプションを使用して、ウォッチモードで Node.js アプリケーションを実行できるようになりました。
アプリケーションをウォッチモードで実行すると、インポートしたファイルを変更した場合は、プロセスが再起動されます。
2.4. サポート対象のアーキテクチャー リンクのコピーリンクがクリップボードにコピーされました!
Node.js ビルダーイメージおよび RPM パッケージが利用可能で、以下の CPU アーキテクチャーとの使用がサポートされます。
- AMD x86_64
- ARM64
- OpenShift 環境の IBM Z (s390x)
- OpenShift 環境の IBM Power System (ppc64le)
第3章 リリースコンポーネント リンクのコピーリンクがクリップボードにコピーされました!
- Node.js 18 Builder Image for RHEL 8
- Node.js 18 Universal Base Image 8
- Node.js 18 Minimal Stand-alone Image for RHEL 8
- Node.js 18 Minimal Universal Base Image 8
- Node.js 18 Builder Image for RHEL 9
- Node.js 18 Universal Base Image 9
- Node.js 18 Minimal Stand-alone Image for RHEL 9
- Node.js 18 Minimal Universal Base Image 9
第4章 修正された問題 リンクのコピーリンクがクリップボードにコピーされました!
本リリースでは、Node.js 18 LTS のコミュニティーリリースのすべての修正された問題が含まれます。
第5章 既知の問題 リンクのコピーリンクがクリップボードにコピーされました!
本リリースに影響する既知の問題はありません。
第6章 必要なインフラストラクチャーコンポーネントに影響する既知の問題 リンクのコピーリンクがクリップボードにコピーされました!
本リリースで必要なインフラストラクチャーコンポーネントに影響を与える既知の問題はありません。