Node.js 20.6 est disponible avec une prise en charge des fichiers de configuration .env et l'intégration du garbage collector C++ "Oilpan".
Node.js 20.6, la dernière mise à jour de ce populaire moteur d'exécution JavaScript, a été publiée. Parmi les nouvelles fonctionnalités, il y a la possibilité de configurer des variables d'environnement dans un fichier transmis à l'application lors de son lancement, ainsi qu'une prise en charge expérimentale du langage C++ ramassant les miettes (garbage-collected) via un projet V8 appelé Oilpan. V8 est le moteur JavaScript et WebAssembly également utilisé par Google Chrome, Deno et de nombreux autres projets.
L'idée de la prise en charge des fichiers .env est que les développeurs peuvent initialiser une application Node.js avec une configuration prédéfinie. Un fichier .env est une collection de paires clé-valeur au format INI. Ces fichiers permettent de définir à la fois des variables d'environnement et des options Node. La définition des options Node se fait via la variable d'environnement NODE_OPTIONS, qui est un ensemble délimité par des espaces de ce qui serait autrement des options de ligne de commande.
Changements importants
Prise en charge intégrée des fichiers .env
À partir de la version 20.6.0 de Node.js, Node.js prend en charge les fichiers .env pour la configuration des variables d'environnement. Votre fichier de configuration doit respecter le format INI, chaque ligne contenant une paire clé-valeur pour une variable d'environnement. Pour initialiser votre application Node.js avec des configurations prédéfinies, utilisez la commande CLI suivante : node --env-file=config.env index.js.Par exemple, vous pouvez accéder à la variable d'environnement suivante en utilisant process.env.PASSWORD lors de l'initialisation de votre application :
En plus des variables d'environnement, ce changement vous permet de définir vos NODE_OPTIONS directement dans le fichier .env, éliminant ainsi le besoin de l'inclure dans votre package.json.
import.meta.resolve non marqué
Dans les modules ES, import.meta.resolve(specifier) peut être utilisé pour obtenir une chaîne d'URL absolue à laquelle specifier se résout, similaire à require.resolve dans CommonJS. Cela permet d'aligner Node.js sur les navigateurs et les autres systèmes d'exécution côté serveur.
Nouveau API register sur node:module pour les hooks de personnalisation de module ; nouveau hook initialize
Il y a un nouveau API register disponible sur node:module pour spécifier un fichier qui exporte les hooks de personnalisation de module, et passer des données aux hooks, et établir des canaux de communication avec eux. La partie "définir le fichier avec le hook" était auparavant gérée par un drapeau --experimental-loader, mais lorsque les hooks ont été déplacés dans un thread dédié dans la version 20.0.0, il a été nécessaire de fournir un moyen de communiquer entre le thread principal (application) et le thread des hooks. Cela peut maintenant se faire en appelant register depuis le thread principal et en transmettant des données, y compris des instances de MessageChannel.
Il est encouragé aux utilisateurs de migrer vers une approche qui utilise --import avec register, comme par exemple :
node --import ./file-that-calls-register.js ./app.js
L'utilisation de --import garantit que les hooks de personnalisation sont enregistrés avant l'exécution de tout code d'application, même le point d'entrée.
Le hook de personnalisation de module load peut maintenant supporter CommonJS
Les auteurs de hook de personnalisation de modules peuvent désormais gérer les sources de modules ES et CommonJS dans le hook load. Cela fonctionne pour les modules CommonJS référencés via import ou require, tant que le point d'entrée principal de l'application est géré par le chargeur de module ES (par exemple parce que le point d'entrée est un fichier de module ES, ou si l'option --import est passée). Cela devrait simplifier la personnalisation du processus de chargement des modules Node.js, car les auteurs de paquets peuvent personnaliser davantage Node.js sans s'appuyer sur des API obsolètes telles que require.extensions.
Les addons Node.js C++ ont maintenant un support expérimental pour cppgc (Oilpan), une bibliothèque de garbage collection C++ dans V8.
Désormais, lorsque Node.js démarre, il s'assure qu'il y a un v8::CppHeap attaché à l'isolat V8. Cela permet aux utilisateurs d'allouer dans v8::CppHeap en utilisant les en-têtes <cppgc/*> de V8, qui sont maintenant également inclus dans les en-têtes de Node.js disponibles pour les addons. Notez que puisque Node.js n'intègre que la bibliothèque cppgc provenant de V8, la stabilité de l'ABI de cppgc n'est actuellement pas garantie dans les mises à jour semver-minor et -patch, mais il n'est pas attendu à ce que l'ABI se brise souvent, car elle est stable et testée dans Chromium depuis des années. Il pourrait être envisagé d'inclure cppgc dans les garanties de stabilité de l'ABI lorsqu'il sera suffisamment adopté en interne et en externe.
Pour aider les auteurs d'addons à créer des références JavaScript vers C++ dont le garbage collector de V8 peut être conscient, une fonction d'aide node::SetCppgcReference(isolate, js_object, cppgc_object) a été ajoutée à node.h. V8 pourrait fournir une alternative native dans le futur, qui pourrait alors remplacer cette fonction d'aide spécifique à Node.js. En attendant, les utilisateurs peuvent utiliser cette API pour éviter d'avoir à coder en dur la disposition des objets enveloppants JavaScript. Un exemple de création d'objets C++ collectés dans le tas unifié et enveloppés dans un objet JavaScript peut être trouvé dans les tests de l'addon Node.js.
L'aide node::ObjectWrap existante continuerait à fonctionner, tandis que la gestion des objets basée sur cppgc sert d'alternative avec certains avantages mentionnés dans l'article du blog V8 à propos d'Oilpan.
Source : Nodejs
Et vous ?
Quel est votre avis sur ces nouvelles fonctionnalités ?
Voir aussi :
La version 20 de Node.js, le moteur d'exécution JavaScript, est désormais disponible et inclut plusieurs nouveautés, dont un modèle de permission Node.js, pour offrir des performances améliorées
Ryan Dahl : « Cher Oracle, veuillez libérer la marque JavaScript ». Le créateur de Node.js et Deno écrit une lettre ouverte à Oracle, lui rappelant que la marque n'a aucune valeur commerciale
Bun, un nouveau moteur d'exécution JavaScript, livré avec un client SQLite3 rapide, il apporte un peu de concurrence pour Node et Deno
Partager