JavaScript-Runtime Node.js 20 führt experimentelle Zugriffsbeschränkungen ein

Das neue Release wird im Oktober 2023 zur LTS-Version. Es kann Zugriffsrechte für eine erhöhte Sicherheit einschränken und stabilisiert das Modul test_runner.

In Pocket speichern vorlesen Druckansicht

(Bild: Sasun Bughdaryan/Shutterstock.com)

Lesezeit: 3 Min.

Die Community hinter der quelloffenen JavaScript-Runtime Node.js hat die Major Version 20 vorgelegt. Im Oktober 2023 soll sie das bisherige Release mit Long-term Support – Node.js 18 – ablösen und diesen Status bis Oktober 2024 beibehalten. Zu den Neuerungen zählen die Einführung des Permission Model und eine Aktualisierung der JavaScript-Engine V8 auf Version 11.3. Der Test Runner gilt nun als stabil.

Das experimentelle Permission Model dient dazu, den Zugriff auf spezifische Ressourcen während der Ausführung zu beschränken, um somit die Sicherheit zu erhöhen. Die API verbirgt sich hinter dem Flag --experimental-permission. Ist das Flag aktiviert, so ist der Zugriff zu allen verfügbaren Permissions eingeschränkt.

Derzeit bezieht sich das Permission Model unter anderem auf den Zugriff auf das Dateisystem, was sowohl das Schreiben (--allow-fs-write) als auch das Lesen (--allow-fs-read) betrifft. Der Zugriff auf den child_process (--allow-child-process) und auf worker_threads (--allow-worker) lässt sich damit ebenfalls steuern.

Beispiele des Node.js-Teams zeigen, wie sich der Schreib- und Lesezugriff für das gesamte Dateisystem festlegen lässt

$ node --experimental-permission --allow-fs-read=* --allow-fs-write=* index.js

oder wie sich der Schreibzugriff auf einen bestimmten Ordner, in diesem Fall /tmp/, beziehen kann:

$ node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read=/home/index.js index.js

Weitere Details zum neuen Permission Model sind der Dokumentation zu entnehmen.

Heise-Konferenz: enterJS 2023

Am 21. und 22. Juni 2023 richten die Veranstalter dpunkt.verlag, heise Developer und iX die Enterprise-JavaScript-Konferenz enterJS in Darmstadt aus. In über 35 Vorträgen kommen JavaScript- und TypeScript-Sprachneuerungen, neue und etablierte Tools und Frameworks – darunter React, SvelteKit und Astro – sowie Barrierefreiheit und Softwarearchitektur zur Sprache.

Ganztägige Workshops stehen sowohl vor Ort als auch online bereit.

Auszug aus dem Programm:

Wie üblich aktualisiert die neue Node.js-Version auch die verwendete JavaScript-Engine V8. In Version 11.3, die Teil von Chromium 113 ist, legt die Engine den Fokus auf eine höhere Performance und neue Sprachfeatures. Zu diesen zählen zusätzliche Methoden für Array.prototype und TypedArray.prototype. Sie erlauben Änderungen auf dem Array, indem sie eine Kopie davon mitsamt der Änderung erstellen. Das Original bleibt dabei unverändert.

Daneben hat das Node.js-Modul test_runner den stabilen Status erreicht. Es enthält die Bausteine für das Schreiben und Ausführen von Tests, darunter describe, it/test, Hooks zum Strukturieren von Testdateien und node --test zum parallelen Ausführen mehrerer Tests. Teile des Test Runner sind jedoch nach wie vor nicht stabil, darunter Reporter und Codeabdeckung.

Der Node.js-Blog zeigt ein Anwendungsbeispiel des Test Runner:

import { test, mock } from 'node:test';
import assert from 'node:assert';
import fs from 'node:fs';

mock.method(fs, 'readFile', async () => "Hello World");
test('synchronous passing test', async (t) => {
  // This test passes because it does not throw an exception.
  assert.strictEqual(await fs.readFile('a.txt'), "Hello World");
});

Neben diesen Neuerungen legt Node.js 20 auch Wert auf Performance, zumal ein neues dediziertes Performance-Team an der Entwicklung beteiligt war. So haben verschiedene Teile der Laufzeit eine Überarbeitung erfahren, beispielsweise URL, fetch() und EventTarget.

Alle weiteren Details sind im Node.js-Blog sowie in den Release Notes zu finden.

(mai)