Node.js 20 est sorti, jetons un coup d'œil aux nouvelles fonctionnalités de Node.js 20

écrit devant

Node.js 20 est sorti le 18 avril 2023 et entrera en support à long terme (alias version LTS) en octobre 2023. Nous pouvons le télécharger et l'expérimenter ici : https://nodejs.org/en/download/current/

Dans Node.js 20, il existe de nombreux nouveaux changements et points forts, notamment le nouveau modèle d'autorisation Node.js, la import.meta.resolveversion synchrone et stable test_runner, le moteur V8 mis à niveau vers la version 11.3, etc.

amélioration des performances

Node.js 20 a effectué de nombreuses optimisations de performances pendant l'exécution, notamment URLdes modules, fetch()des fonctions et EventTargetdes modules.

La surcharge d' initialisation EventTargetest réduite de moitié et tous les sous-systèmes qui dépendent de ce module sont accessibles plus rapidement.

De plus, V8 Fast API(une API pour les fonctions C d'appel rapide, voir ici pour plus de détails ) est également utilisée pour améliorer les performances des API telles que URL.canParse()et les minuteries.

Dans le même temps, il sera Adamis à jour vers la version 2.0, qui est un C++excellent analyseur d'URL écrit en , pour de meilleures performances d'analyse d'URL.

streamEnfin, l'équipe de développement optimise également les performances des décodeurs , URL, URLSearchParamset string en refactorisant .

Nouveaux changements et faits saillants

modèle d'autorisation

Le modèle d'autorisations Node.js est actuellement encore une fonctionnalité expérimentale et est utilisé pour restreindre l'accès à des ressources spécifiques pendant l'exécution. Plus précisément, il comprend les fonctions suivantes :

  • Utilisation --allow-fs-readet --allow-fs-writerestriction d'accès au système de lecture et d'écriture de fichiers
  • Utiliser --allow-child-processun accès restreint à child_process
  • Utiliser --allow-workerun accès restreint à worker_threads
  • --no-addonsL'accès aux plugins natifs est limité à l'aide

En introduisant --allow-fs-readet --allow-fs-write, les développeurs Node.js ont plus de contrôle sur l'accès au système de fichiers. Ces fonctionnalités expérimentales permettent un contrôle plus précis de l'accès au système de fichiers par les processus Node.js.

Pour activer ces indicateurs, les développeurs peuvent utiliser --experimental-permission, suivi des autorisations requises. Par exemple, exécutez la commande suivante pour autoriser l'accès en lecture et en écriture à l'ensemble du système de fichiers :

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

Cette commande prend également en charge les modèles de caractères génériques, par exemple, la commande suivante autorise l'accès en lecture à tous les fichiers et dossiers /home/du répertoire commençant par test :test

$ node --experimental-permission --allow-fs-read=/home/test* index.js

Les modèles de caractères génériques peuvent également être utilisés pour autoriser l'accès à plusieurs fichiers ou dossiers à la fois. Par exemple, la commande suivante autorise l'accès en lecture à tous les fichiers et dossiers du répertoire /home/ commençant par test :

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

Lorsque le modèle d'autorisations est activé, vous pouvez utiliser process.permissionpour vérifier les autorisations.

process.permission.has("fs.write"); // true
process.permission.has("fs.write", "/home/nodejs/protected-folder"); // true

Documentation détaillée : https://nodejs.org/api/permissions.html#process-based-permissions
PR associé : https://github.com/nodejs/node/pull/44004

Le chargeur ESM est sur le point d'entrer dans la phase stable

Dans Node.js, nous pouvons charger le module ESM via ESM loaderle crochet de cycle de vie, qui est ce formulaire. --experimental-loader=./foo.mjsEt maintenant, Node.js 20 prend en charge l'exécution de modules chargés dans un thread dédié isolé du thread principal. Cela fournit une portée distincte pour les modules chargés et garantit qu'il n'y a pas de contamination croisée entre les modules chargés et le code d'application. De plus, pour être cohérent avec le comportement du navigateur, import.meta.resolve()la valeur par défaut est désormais de revenir de manière synchrone.

Ce sont ESM loaderles derniers changements en suspens avant d'entrer dans la phase stable. Lorsque les changements ci-dessus seront stables, l'officiel marquera ces fonctions comme stables. Cela jette les bases d'une utilisation plus large des applications ESM par Node.js.

PR connexe : https://github.com/nodejs/node/pull/44710

Moteur V8 version 11.3

Node.js 20 a mis à niveau le moteur V8 vers 11.3 (partie de Chromium 113). Le nouveau moteur apporte les nouvelles fonctionnalités suivantes :

  • Soutien String.prototype.isWellFormedet toWellFormed.
    • isWellFormedUtilisé pour vérifier si la chaîne est un Unicode légal et toWellFormedconvertira une chaîne en Unicode.
  • Fournit des fonctions qui modifient Array et TypedArray et renvoient une copie du tableau muté.
    • Les fonctions existantes Array.prototypeet TypedArray.prototypemodifient directement le tableau reçu. Au lieu de cela, la nouvelle fonction renvoie une copie modifiée du tableau reçu, laissant le tableau d'origine inchangé. Ces nouvelles fonctions sont utiles dans les styles de programmation où les données sont immuables.
  • Redimensionnable ArrayBuffer et Growable SharedArrayBuffer.
  • Les expressions régulières prennent en charge vles indicateurs et +les extensions.
    • Cette modification ajoute des opérations d'ensemble sur les chaînes, les littéraux de chaîne et les propriétés Unicode aux expressions régulières. Avec ces modifications, les développeurs peuvent utiliser des expressions régulières pour faire correspondre des chaînes avec des caractères Unicode spécifiques.
    • Exemple : utiliser /[\p{Script_Extensions=Greek}&&\p{Letter}]/vpour correspondre à toutes les lettres grecques.
  • Appels de queue WebAssembly.

PR connexe : https://github.com/nodejs/node/pull/47251

Le module Test Runner est entré dans la phase stable

test_runnerLe module est entré dans la phase stable dans Node.js 20. Il est principalement utilisé pour écrire et exécuter des fichiers de test, notamment :

  • describe// itfonctions testet crochets pour les fichiers de test.
  • fausses données.
  • Surveiller le mode de changement de fichier (mode montre).
  • node --testPrend en charge l'exécution de plusieurs fichiers de test en parallèle.

Voici test_runnerun exemple de fichier test utilisé :

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

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

PR connexe : https://github.com/nodejs/node/pull/46983

Le blob doit être transmis lors de la préparation d'une seule application exécutable

Les applications exécutables uniques (SEA) font référence aux programmes qui peuvent être exécutés directement dans le système d'exploitation sans dépendre de l'environnement Node.js. Généralement, les développeurs choisiront pkg, boxednodeet d'autres solutions communautaires pour empaqueter une application Node.js dans un fichier exécutable. Node.js a créé une équipe associée en 2022 pour fournir une solution officielle de génération SEA. Pour l'instant, les fonctions liées au SEA sont encore des fonctions expérimentales .

Dans Node.js 20, la création d'une seule application exécutable nécessite désormais l'injection d'un blob préparé par Node.js à partir d'une configuration JSON au lieu de fichiers JS bruts, une modification permettant d'intégrer plusieurs ressources partagées dans SEA.

Par exemple:

mer-config.json

{
    
    
  "main": "hello.js",
  "output": "sea-prep.blob"
}

Cela écrira le blob dans un fichier sea-prep.blob.

$ node --experimental-sea-config sea-config.json

De cette façon, ce blob peut être injecté dans le binaire.

PR connexe : https://github.com/nodejs/node/pull/47125

API de chiffrement Web

Dans Node.js 20, les paramètres de fonction de l'API Web Crypto sont modifiés selon la norme WebIDL, afin qu'ils soient alignés avec d'autres implémentations de l'API Web Crypto telles que les navigateurs. Cela améliore encore l'interopérabilité de l'API Web Crypto de Node.js avec d'autres implémentations.

PR connexe : https://github.com/nodejs/node/pull/46067

Prend en charge les fenêtres ARM64

Node.js prend en charge tellement de plates-formes et d'architectures que les développeurs s'attendent à ce qu'il fonctionne dans n'importe quel environnement. La bonne nouvelle est que Node.js 20 prend désormais en charge l'exécution sur ARM64 Windows !

PR connexe : https://github.com/nodejs/node/pull/47233

Nouveaux développements dans WASI (Web Assembly System Interface)

Bien que les fonctionnalités liées à WASI soient encore expérimentales dans Node.js , dans Node.js 20, nous n'avons plus besoin d'utiliser les options de ligne de commande pour activer WASI. De plus, new WASI()lors de l'instanciation d'un objet WASI, un versionparamètre doit être passé par défaut pour clarifier sa version correspondante.

Mettre à jour Node.js

Node.js 14 arrivera en fin de vie en avril 2023, et Node.js 16 (LTS) arrivera en fin de vie en septembre 2023.

Il est donc temps de commencer à penser à mettre à jour Node.js vers Node.js 18 (LTS) ou Node.js 20 (bientôt LTS) !

Guess you like

Origin blog.csdn.net/u011748319/article/details/130273671