Was ist neu in Node.js v20 (Test Runner, Berechtigungsmodell, SEA, V8 JS Engine 11.3)
Veröffentlicht: 2023-04-28Node.js v20 ist jetzt verfügbar! Am 18. April 2023 wurde es öffentlich gemacht und kann nun von allen genutzt werden. Mit dieser Version sollte Node.js viel sicherer und leistungsfähiger sein.
Es ist wichtig zu wissen – da es sich um eine gerade nummerierte Version handelt, soll sie im Oktober 2023 eine Version mit langfristigem Support (LTS) werden und bis April 2026 unterstützt werden. Das Node.js-Team sucht jedoch aktiv nach Community Feedback, um Probleme zu identifizieren und zu beheben, bevor es zu LTS hochgestuft wird.
Diese neue Version von Node.js bringt aufregende Updates und Funktionen, die Entwickler sicherlich zu schätzen wissen werden, wie das experimentelle Berechtigungsmodell, synchrone import.meta.resolve
, ein stabiler Testläufer, aktualisiert die V8-JavaScript-Engine auf Version 11.3 und bringt Leistungsverbesserungen und Fehler Korrekturen und vieles mehr.
In diesem Artikel werden Sie die in Node.js v20 eingeführten Änderungen untersuchen und einen detaillierten Einblick in die neuen Features und Funktionen erhalten.
Erste Schritte mit Node.js v20
Die Installation von Node.js v20 ist ganz ähnlich wie bei anderen Versionen von Node.js. Alles, was Sie tun müssen, ist:
- Laden Sie das Installationspaket von der offiziellen Node.js-Website herunter.
- Nachdem Sie das Installationsprogramm heruntergeladen haben, führen Sie es aus und folgen Sie den Anweisungen, um den Installationsvorgang abzuschließen. Dieser Vorgang ist ziemlich einfach, und Sie müssen nur der Lizenzvereinbarung zustimmen und auf die Schaltfläche „Weiter“ klicken.
- Starten Sie Ihr System/Ihren Computer neu, nachdem der Installationsvorgang abgeschlossen ist, um sicherzustellen, dass alle Änderungen wirksam werden.
- Überprüfen Sie Ihre Node.js-Installation, indem Sie den folgenden Befehl ausführen:
node -v
Wenn Sie die Versionsnummer (v20.0.0) sehen, bedeutet dies, dass Node.js korrekt installiert ist und Sie bereit sind, mit Node.js v20 zu arbeiten.
Was ist neu in Node.js v20?
Lassen Sie uns die 5 wichtigsten Updates untersuchen, die mit dieser Node.js-Version eingeführt wurden. Zu diesen Funktionen gehören:
Experimentelles Berechtigungsmodell
Die Einführung des experimentellen Berechtigungsmodells in Node.js v20 ist eine bedeutende Ergänzung, die Entwicklern mehr Kontrolle über den Zugriff auf bestimmte Ressourcen während der Ausführung gibt.
Diese neue Funktion ist vorteilhaft, wenn Sicherheit und Ressourcennutzung kritisch sind, beispielsweise in einer Produktionsumgebung.
Das Berechtigungsmodell verfügt über mehrere Fähigkeiten, darunter das Einschränken des Zugriffs auf das Dateisystem, child_process, worker_threads und native Addons.
Entwickler können Flags wie --allow-fs-read
, --allow-fs-write
und --allow-child-process
verwenden, um anzugeben, auf welche Ressourcen zugegriffen werden kann. Um diese Flags zu aktivieren, müssen Entwickler das Flag --experimental-permission
in Kombination mit den erforderlichen Berechtigungen verwenden.
Hier ist ein Beispiel für die Verwendung des Berechtigungsmodells, um Lese- und Schreibzugriff auf das gesamte Dateisystem zu ermöglichen:
$ node --experimental-permission --allow-fs-read=* --allow-fs-write=* index.js
Entwickler können das Berechtigungsmodell auch verwenden, um den Zugriff auf bestimmte Ordner und Dateien festzulegen. Der folgende Befehl ermöglicht beispielsweise den Schreibzugriff auf den Ordner /tmp/ :
$ node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read=/home/index.js index.js
Ein wesentlicher Vorteil des Berechtigungsmodells ist die Möglichkeit, den Zugriff auf das Dateisystem genauer zu steuern. Beispielsweise können Entwickler Pfade und Platzhaltermuster angeben, um den Zugriff auf bestimmte Ordner oder Dateien zu ermöglichen.
$ node --experimental-permission --allow-fs-read=/home/user/* index.js
Der obige Befehl gewährt Lesezugriff auf alle Ordner im Verzeichnis /home/user/ .
Die Permission-Eigenschaft des Prozessobjekts kann auch verwendet werden, um zu prüfen, ob eine bestimmte Berechtigung zur Laufzeit erteilt wurde. Wenn Sie beispielsweise überprüfen möchten, ob Ihr Node.js-Prozess Lesezugriff auf einen bestimmten Ordner /home/user/documents hat, können Sie den folgenden Code verwenden:
if (process.permission.has('fs.read', '/home/user/documents')) { console.log('Read access granted to /home/user/documents'); } else { console.log('Read access not granted to /home/user/documents'); }
Durch die Verwendung des Berechtigungsmodells haben Sie eine genauere Kontrolle über den Dateisystemzugriff Ihrer Node.js-Prozesse, was zu besserer Sicherheit und effizienterer Ressourcennutzung führen kann.
Es ist wichtig zu beachten, dass das Berechtigungsmodell noch experimentell ist und sich in zukünftigen Versionen von Node.js ändern kann. Es ist ratsam, mit der Dokumentation des Berechtigungsmodells auf dem neuesten Stand zu bleiben und bei der Verwendung dieser experimentellen Funktionen Vorsicht walten zu lassen.
Stabiler Testläufer
Node.js v20 enthält eine stabile Version des Moduls test_runner, mit der Entwickler JavaScript-Testsuiten schnell und einfach erstellen und ausführen können, ohne zusätzliche Abhängigkeiten installieren zu müssen.
Der Stable-Test-Runner enthält jetzt mehrere Bausteine, wie beispielsweise describe
, it
/ test
und Hooks, zum Erstellen und Strukturieren von Testdateien, zusammen mit Mocking, Watch-Modus und der Möglichkeit, mehrere Testdateien parallel mit dem node --test
.
Hier ist ein Beispiel für die Verwendung des Testrunners:
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"); });
Der Test Runner bietet konfigurierbare und benutzerdefinierte Testreporter über das Flag --test-reporter
, experimentelle Testabdeckung durch das Flag --experimental-test-coverage
und Mocking-Funktionen.
Der Stable Test Runner ist zwar nicht dazu gedacht, voll funktionsfähige Test-Frameworks wie Jest oder Mocha zu ersetzen, bietet aber eine einfache und schnelle Möglichkeit, Testsuiten zu erstellen. Es wurde seit seiner Einführung in Node.js v19 erheblich verbessert und dank Endbenutzertests und Feedback wurde es nun in Node.js v20 als stabil markiert.
Weitere Informationen finden Sie in diesem zusammengeführten Pull-Request.
V8 JavaScript-Engine aktualisiert auf 11.3
Die V8-JavaScript-Engine, die Node.js antreibt, wurde in Node.js v20 auf Version 11.3 aktualisiert. Dies bringt eine verbesserte Leistung und führt neue Sprachfunktionen ein. Einige der neuen Funktionen, die dieses Update enthält:
-
String.prototype.isWellFormed
undtoWellFormed
: Diese Methoden sind besonders nützlich, um das richtige Zeichenfolgenformat sicherzustellen. Dadurch wird sichergestellt, dass die Zeichenfolgeneingabe des Benutzers im richtigen UTF-16-Format erfolgt, wodurch Fehler im Zeitalter von Emojis reduziert werden. - Methoden, die Array und TypedArray durch Kopieren ändern: Dies kann nützlich sein, um modifizierte Kopien von Arrays zu erstellen, ohne die Originaldaten zu beeinträchtigen, was besonders in Fällen relevant ist, in denen Sie die Originaldaten für Vergleichs- oder andere Zwecke aufbewahren müssen.
- Anpassbarer
ArrayBuffer
und erweiterbarerSharedArrayBuffer
: bietet größere Flexibilität und ermöglicht eine effizientere Speicherzuweisung. - RegExp v Flag mit Set-Notation und Eigenschaften von Strings: Fügt Funktionalität für reguläre Ausdrücke hinzu.
- WebAssembly-Endaufruf: bietet eine Möglichkeit, bestimmte Arten von Funktionsaufrufen zu optimieren.
Diese Updates zeigen das kontinuierliche Engagement der Node.js-Entwicklergemeinschaft zur Verbesserung von Leistung und Funktionalität.
Synchron import.meta.resolve()
In Node.js v20 wurde import.meta.resolve()
eingeführt, wodurch es einfacher wird, Skripts zu schreiben, die nicht ortsabhängig sind. Diese Funktion kehrt synchron zurück, ähnlich dem Browserverhalten, was eine effizientere Ausführung ermöglicht.
Auflöse-Hooks des Benutzerladeprogramms können weiterhin als asynchrone Funktion definiert werden, aber import.meta.resolve()
gibt immer noch synchron für den Anwendungscode zurück, selbst wenn asynchrone Auflöse-Hooks geladen werden.
Das synchrone Verhalten von import.meta.resolve()
ermöglicht eine effizientere Codeausführung, insbesondere beim Umgang mit großen Datenmengen. Als Autor können Sie Hooks je nach Wunsch entweder als asynchrone oder als synchrone Funktionen definieren. Der Anwendungscode wird weiterhin synchron ausgeführt, unabhängig davon, ob asynchrone Auflösungs-Hooks geladen sind.
Experimentelle einzeln ausführbare Anwendungen (SEA)
Experimental Single Executable Applications (SEA) ist eine neue Funktion, die in Node.js v20 eingeführt wurde und die es ermöglicht, Ihre Anwendung mit der Node.js-Binärdatei zu bündeln, sodass Endbenutzer sie als einzelne ausführbare Datei verteilen und ausführen können.
Dies war eine lange Anfrage der Community, und das Team hat den Ansatz im vergangenen Jahr verfeinert.
In Node.js v20 erfordert das Erstellen einer einzelnen ausführbaren App das Einfügen eines von Node.js vorbereiteten Blobs aus einer JSON-Konfiguration, anstatt die unformatierte JS-Datei einzufügen.
Ein Blob ist eine Datei, die Binärdaten enthält, die in diesem Fall von Node.js vorbereitet und in die Binärdatei eingefügt werden. Diese Änderung wurde vorgenommen, um die Einbettung mehrerer koexistierender Ressourcen in die SEA zu ermöglichen, was neue Anwendungsfälle eröffnet.
Hier ist ein Beispiel für eine sea-config.jso n-Datei:
{ "main": "myscript.js", "output": "sea-prep.blob" }
Bei Ausführung mit dem Befehl node --experimental-sea-config sea-config.json
wird der Blob in die Datei sea-prep.blob geschrieben, die dann in die Binärdatei eingefügt werden kann.
Die SEA-Funktion ermöglicht es Entwicklern, Node.js-Anwendungen zu verteilen, ohne dass Benutzer Node.js installieren müssen. Die Funktionalität wurde von Darshan Sen entwickelt, der im Rahmen der JavaScriptLandia Awards auf der OpenJS World den Outstanding Contribution from a New Arrival Award gewann.
Microsoft, ein Mitglied der OpenJS Foundation, untersucht diese Funktion, um Vektorangriffe zu reduzieren und die Node.js-Architektur für eine bessere Erfahrung zu stärken. Während die SEA-Funktion noch experimentell ist, stellt sie eine aufregende neue Entwicklung für die Node.js-Community dar.
Leistung
Node.js v20 kommt mit erheblichen Laufzeitverbesserungen, wobei das neu gebildete Node.js-Performance-Team einen erneuten Fokus auf die Leistung legt. Die Verbesserungen beinhalten Optimierungen an den Kernteilen der Laufzeit, wie URL, fetch()
und EventTarget
.
Eine der bemerkenswerten Verbesserungen ist die Reduzierung der Kosten für die Initialisierung EventTarget
, die halbiert wurden, was zu einem schnelleren Zugriff auf alle Subsysteme führt, die es verwenden. Darüber hinaus wurden V8 Fast API-Aufrufe verwendet, um die Leistung in APIs wie URL.canParse()
und Timern zu verbessern.
Eine weitere spezifische Änderung ist die Aufnahme der aktualisierten Version 2.0 von Ada, einem schnellen und spezifikationskonformen URL-Parser, der in C++ geschrieben ist.
Zusammenfassung
In diesem Artikel haben Sie einige der wichtigsten Funktionen (experimentell und stabil) und Verbesserungen kennengelernt, die Node.js v20 mit sich bringt, wie z .
Es ist wichtig zu wissen, dass Node.js v14 im April 2023 auslaufen wird, daher wird empfohlen, mit der Planung eines Upgrades auf Node.js v18 (LTS) oder vNode.js 20 (bald LTS) zu beginnen.
Möchten Sie die neueste Version von Node.js ausprobieren? Du kannst das tun, indem du deine Node.js-Anwendung auf Kinsta bereitstellst und deine ersten 20 $ auf uns bekommst. Wir unterstützen bereits Node.js v20, was bedeutet, dass Sie die neuen Funktionen und Fähigkeiten ab heute testen können.
Jetzt bist du dran! Welche Funktionen oder Verbesserungen finden Sie in Node.js v20 am interessantesten? Gibt es irgendwelche wichtigen, die wir vielleicht übersehen haben? Lass es uns in den Kommentaren wissen.