Node.js 20

432文字
2分
編集

Node.js 20.0.0 がリリースされた。

以下で扱わない情報として、ファイルのアクセスやプロセスの起動を制限する新しいパーミッションモデルが追加された他、ESM Loader API が Worker 内で実行されるようになりアプリ側と実行コンテキストを分離できるようになった。

#Stable Test Runner

内蔵されているテストランナーnode:testが Stable になった。node:testは Jest などとほぼ同じインターフェイスを持っており、また内蔵されているため別途インストールなどは必要ない。describe、beforeEach、mock.fn など主要なものは Node.js 18 からサポートされており、カバレッジレポートなども experimental フラグは必要なものの既に利用できる。

jsx
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");
  });
});

https://nodejs.org/api/test.html

#New ECMAScript Features

Node.js 20 で 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

jsx
const array = [2, 6, 3];
array.toReversed(); // [3, 6, 2]
array.toSorted(); // [2, 3, 6]
array.with(1, 2); // [2, 2, 3]

#参考文献