Node.jsチームはこの程、"Node.js 22"をリリースした。主な機能には、JavaScriptネイティブ・モジュールやウェブAPIとの互換性の向上とパフォーマンスの改善が含まれている。
Node.js 21はすでに主要なJavaScriptモジュールAPIをサポートしており、その中にはimport.meta
オブジェクトも含まれていた。具体的には、Node.js 21はimport.meta.dirname
とimport.meta.filename
の両方をサポートしている。Node.js 22では、JavaScriptモジュール(ESM)グラフのsynchronousrequireの
サポートが追加された。リリースノートに詳細が記載されている。
experimental-require-moduleが
有効で、require()
によってロードされるECMAScriptモジュールが以下の要件を満たしています。
- ESモジュールとして "type "で明示的にマークされています。もっとも近いpackage.jsonの "type": "module "フィールド、または.mjs拡張子で、ESモジュールとして明示的にマークされています。
- 完全に同期的です(トップレベルのawaitを含みません)。
require()
は、要求されたモジュールをESモジュールとしてロードし、モジュール名空間オブジェクトを返します。この場合、dynamicimport()
と似ていますが、同期的に実行され、名前空間オブジェクトを直接返します。将来的には、フラグなしでrequire(esm)
をデフォルトで有効にする予定です。
CoderOasisの技術ブロガーは、この機能を説明する簡単なコードサンプルを提供した。
// ES module: math.js export function add(a,b) {return a + b; } // CommonJS module: app.js const {add} = require('./math.js'); console.log(add(2, 3)); // Output:5
Node.js 21は、NavigatorAPIの部分的なサポートと、ブラウザと互換性のあるWebsocketクライアントの実験的なサポートをすでに備えていた。Node.js22では、Websocketのサポートは実験的なままだが、デフォルトになった。
Node.js 22は、パフォーマンス面でも継続的な進歩を示している。
Node.js 22はV8 JavaScriptエンジンを12.4に更新し、Maglevと呼ばれる最適化JITコンパイラ(既存のSparkplugコンパイラと、Turbofanコンパイラの間にリリース)を活用している。12.4アップデートには、WebAssembly Garbage CollectionやIterator Helpersといった機能が含まれている。また、ストリームのハイ・ウォーター・マークが16KiBから64KiBに増加したことにより、Node.jsストリームのパフォーマンスが向上した。これによりメモリ使用量がわずかに増加するため、メモリに敏感な環境では、setDefaultHighWaterMark() によってデフォルト値を調整できる。 AbortSignal
インスタンスの生成効率を改善することにより、fetch()
API とテスト・ランナーのパフォーマンスが向上した。
Node.jsは、Open JS FoundationによるMITライセンスの下で利用可能なオープン・ソース・ソフトウェアである。Node.jsのコントリビューション・ガイドラインと行動規範にて、コントリビューションとフィードバックが奨励されている。