主な変更点に関して個人的にざっくりまとめてみる。詳細は公式のリリースノートを確認すること。v18やv16と比べるとアップデートが多い気がする。個人的にはv12, v14並に嬉しいアップデートかも。特に単一バイナリのサポートとARM64版Windowsのサポートが強力だと思います。
内容が理解できていないものもあるので、もし何か間違いなどあれば適当に突っ込んで貰えると嬉しいです。
目次
権限モデルの追加
--experimental-permission
フラグを付けることでファイル システム操作、子プロセスの生成、ワーカー スレッドの作成など、プログラムの実行中に特定のリソースへのアクセスを制限できる様になった模様。
実験的機能であれば16のときにもあったと思うが、この時との違いは詳しく確認してない。参考程度にv18とlatestとのドキュメントリンクを置いておく。
- https://nodejs.org/api/permissions.html#process-based-permissions
- https://nodejs.org/docs/latest-v18.x/api/permissions.html#process-based-permissions
専用スレッドで実行されるカスタムESMローダーフックの追加
多分ESMを別スレッドで読み込むことでヒープ競合が起きなくなるのだと思うが、使ったことがないので詳細は不明。TypeScriptを使っている限り、まだまだCJSを使う機会が多く、ESMへの完全移行は先な気がするので放置で良さそう?誰か詳しい人教えて!
同期的になったimport.meta.resolve()
詳細不明なのでパス。以下の記事が参考になるかも?
V8エンジンのアップデート
Chromium 113の一部であるバージョン11.3に更新されたそうです。前回は 11.2 だったようですが、いつのバージョンに入ってたのかは未確認。
テストランナーが安定版になった
Test runnerがStableになり本番環境で使えるレベルとなった。Jestより貧弱な気しかしないが一度は試してみたいところです。
Ada 2.0の導入
URI解析のパフォーマンスが向上したほか、URLホスト名解析が楽になったっぽい?
単一実行バイナリの生成に対応
実験的な機能ですが単一実行バイナリの生成がサポートされた。リリースノートを読む限りNode.jsランタイムをバンドルすることで実現してそうなので、Electronみたいに巨大なバイナリができそうな気がする。興味深いので是非試してみたい機能。
Web暗号化APIの互換性向上
恐らく主要なブラウザに実装されているWebCrypt実装を模倣したものが追加された?
ARM64版Windowsのサポート
Node.jsの全機能がARM64版Windowsで動作するようになったとのこと。Surface Pro Xとかでも動くようになるものと思われる。単一実行バイナリの作成と合わせて嬉しい機能です。
WebAssembly System Interfaceインスタンス作成時にバージョン指定を必須に
new WASI()
でバージョン指定が必須になりました。
url.parse()
に無効なポート番号を持つURLを渡すと警告を出すように
次のようなURLを渡すと実行時に警告が出るようになりました。
url.parse('https://evil.com:.example.com');
url.parse('git+ssh://git@github.com:npm/npm');
LTSスケジュール
20系がLTSに入るのは2023-10-24からです。