Node.js 20 est maintenant disponible ! Les points forts incluent le nouveau modèle de permission Node.js, un import.meta.resolve synchrone, un test_runner stable, des mises à jour du moteur JavaScript V8 vers 11.3, Ada vers 2.0, et plus encore !Le projet continue de progresser dans un certain nombre de domaines, avec beaucoup de nouvelles fonctionnalités et de correctifs dans les versions LTS existantes. Pour cette raison, les changements décrits dans le journal des modifications de Node.js 20 ne représentent qu'un petit sous-ensemble des fonctionnalités et des travaux réalisés depuis la dernière version majeure. Ce bulletin de blog ajoutera un contexte supplémentaire sur l'ensemble du travail en relation avec ces changements.
Pour télécharger Node.js 20.0.0, visitez : https://nodejs.org/en/download/current/. Vous pouvez trouver dans ce billet de publication la liste complète des modifications incluses dans cette version.
Pour rappel, Node.js 20 entrera dans le support à long terme (LTS) en octobre, mais d'ici là, il s'agira de la version "Current" pour les six prochains mois. Vous êtes encouragés à explorer les nouvelles fonctionnalités et les avantages offerts par cette dernière version et à évaluer leur impact potentiel sur vos applications.
Modèle de permission
Le modèle de permission Node.js est un mécanisme expérimental permettant de restreindre l'accès à des ressources spécifiques pendant l'exécution.
Dans cette première version contenant le modèle de permission, les fonctionnalités sont fournies avec les capacités suivantes :
- Restreindre l'accès au système de fichiers (lecture et écriture) : Utiliser --allow-fs-read et --allow-fs-write
- Restreindre l'accès à --allow-fs-write : Utiliser --allow-child-process
- Restreindre l'accès aux worker_threads : Utiliser --allow-worker
- Restreindre l'accès aux modules complémentaires natifs (même chose que l'option --no-addons)
Les permissions disponibles sont documentées par le flag --experimental-permission.
Lors du démarrage de Node.js avec l'option --experimental-permission, la possibilité d'accéder au système de fichiers, de créer des processus et d'utiliser node:worker_threads sera restreinte.
Les développeurs utilisant Node.js ont maintenant plus de contrôle sur l'accès au système de fichiers avec l'introduction des drapeaux --allow-fs-read et --allow-fs-write. Ces fonctionnalités expérimentales permettent un contrôle plus granulaire des parties du système de fichiers auxquelles les processus Node.js peuvent accéder.
Pour activer ces flags, les développeurs peuvent utiliser le drapeau --experimental-permission avec les permissions souhaitées. Par exemple, la commande suivante permet d'accéder en lecture et en écriture à l'ensemble du système de fichiers :
| Code : | Sélectionner tout |
$ node --experimental-permission --allow-fs-read=* --allow-fs-write=* index.js
Les développeurs peuvent également spécifier des chemins spécifiques pour l'accès au système de fichiers en passant des valeurs séparées par des virgules aux flags. Par exemple, la commande suivante permet d'accéder en écriture au dossier /tmp/ :
| Code : | Sélectionner tout |
$ node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read=/home/index.js index.js
Les caractères génériques peuvent également être utilisés pour permettre l'accès à plusieurs fichiers ou dossiers à la fois. Par exemple, la commande suivante permet d'accéder en lecture à tous les fichiers et dossiers du répertoire /home/ qui commencent par test :
| Code : | Sélectionner tout |
$ node --experimental-permission --allow-fs-read=/home/test* index.js
Lorsque le modèle de permission est activé, la nouvelle propriété permission de l'objet process peut être utilisée pour vérifier si une certaine permission a été accordée au moment de l'exécution.
| Code : | Sélectionner tout |
1 2 | process.permission.has('fs.write'); // true
process.permission.has('fs.write', '/home/nodejs/protected-folder'); // true |
Il est important de noter que ces fonctionnalités sont encore expérimentales et peuvent être modifiées dans les prochaines versions de Node.js.
Les hooks personnalisés du chargeur ESM sont presque stables
Les hooks personnalisés du cycle de vie des modules ES fournis par les chargeurs (--experimental-loader=./foo.mjs) s'exécutent désormais dans un thread dédié, isolé du thread principal. Cela permet aux chargeurs de disposer d'un champ d'application distinct et garantit l'absence de contamination croisée entre les chargeurs et le code de l'application.
Conformément au comportement des navigateurs, import.meta.resolve() retourne désormais de manière synchrone ; notez que les hooks resolve dans les chargeurs utilisateur peuvent rester asynchrones si l'auteur du chargeur le souhaite, et import.meta.resolve retournera toujours de manière synchrone dans le code de l'application.
Ces changements étaient les derniers points en suspens avant de marquer les chargeurs ESM comme stables. Une fois qu'un certain temps se sera écoulé sans que des bogues significatifs aient...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.