Node.js v20
Node.js v20.0.0 がリリース。
以下で扱わない情報として、ファイルのアクセスやプロセスの起動を制限する新しいパーミッションモデルが追加された他、ESM Loader API が Worker 内で実行されるようになりアプリ側と実行コンテキストを分離できるようになりました。
Stable Test Runner
内蔵されているテストランナーnode:testが Stable になりました。node:testは Jest などとほぼ同じインターフェイスを持っており、また内蔵されているため別途インストールなどは必要ありません。describe、beforeEach、mock.fn など主要なものは Node.js v18 からサポートされており、カバレッジレポートなども experimental フラグは必要なものの既に利用できます。
import assert from "node:assert";
import { mock, test, beforeEach, describe } from "node:test";
describe("tests", async () => {
const sum = mock.fn((a, b) => {
return a + b;
});
beforeEach(() => console.log("about to run a test"));
it("is a subtest", () => {
assert.ok("some relevant assertion here");
});
});New ECMAScript Features
Node.js v20 で V8 のバージョンが 11.3 に上がったため、新しい ECMAScript の機能が利用できるようになっています。
RegExp v flag
このvフラグでは、集合演算が追加される他、いくつかの Properties of Stringsが追加され複数のコードポイントからなる絵文字を扱えるようになります。
https://github.com/tc39/proposal-regexp-v-flag
このフラグは、uフラグの改善を目的の 1 つにしており、Properties of Strings はuフラグでも扱えるようにする提案がある他、WhatWGでは HTML の input 要素の pattern 属性がuフラグからvフラグに置き換えられています。
Change Array by Copy
破壊的なことで有名な sort()や reverse()の非破壊バージョンが扱えます。
https://github.com/tc39/proposal-change-array-by-copy
const array = [2, 6, 3];
array.toReversed(); // [3, 6, 2]
array.toSorted(); // [2, 3, 6]
array.with(1, 2); // [2, 2, 3]