← L'édition
DevNouveau2 min de lecture

Node.js 24.20.0 LTS : support du bloc using dans AsyncLocalStorage et audit de sécurité

La version LTS 24.20.0 de Node.js, nommée « Krypton », introduit la gestion explicite des ressources dans AsyncLocalStorage. Cette mise à jour apporte également un mode d'audit pour le système de permissions, le support des cartes de paquets et l'activation de JSPI pour WebAssembly.

Fil « Publication de la version LTS Node.js 24.20.0 »

Illustration de l'article — nodejs.org
Image : nodejs.org

La version 24.20.0 (LTS) de Node.js, baptisée « Krypton », est officiellement publiée. Cette version maintenue sur le long terme (LTS pour Long Term Support) apporte plusieurs améliorations ciblées sur l'isolation de contexte, la sécurité à l'exécution et la manipulation des flux de données.

Gestion du contexte avec l'instruction using

L'évolution principale concerne le module async_hooks. La classe AsyncLocalStorage (outil permettant d'associer un contexte de données à un flux d'exécutions asynchrones) gère désormais les portées via l'instruction using. Cette syntaxe, issue de la gestion explicite des ressources du langage JavaScript, permet de définir automatiquement la durée de vie d'un contexte sans devoir imbriquer de fonctions de rappel.

import { AsyncLocalStorage } from 'node:async_hooks';

const storage = new AsyncLocalStorage();

function processRequest() {
  // Le contexte est automatiquement nettoyé à la sortie du bloc
  using _scope = storage.run({ requestId: 'abc-123' });
  // Traitement dans le contexte
}

Contrôle fin du système de permissions

Le système de permissions de Node.js reçoit deux évolutions notables pour renforcer la sécurité de l'environnement d'exécution :

  • Abandon dynamique d'autorisations : l'API (interface de programmation d'application) permission s'enrichit de la méthode permission.drop(), permettant à une application de révoquer elle-même certaines de ses autorisations en cours d'exécution.
  • Mode audit : l'argument de ligne de commande --permission-audit fait son apparition pour consigner les accès aux ressources sans interrompre prématurément l'exécution du programme.

Flux, WebAssembly et outillage

L'écosystème interne du runtime (environnement d'exécution) bénéficie d'autres ajouts majeurs :

  • Cartes de paquets (package maps) : le système de chargeurs de modules (loaders) prend désormais en charge les cartes de paquets pour personnaliser la résolution des dépendances.
  • WebAssembly : activation de JSPI (JavaScript Promise Integration, interface facilitant la gestion des promesses asynchrones entre JavaScript et le code WebAssembly).
  • Gestion des flux et mémoires tampons : ajout du module expérimental node:stream/iter pour l'itération des flux, et intégration d'un paramètre end dans plusieurs méthodes de la classe Buffer (gestionnaire de données binaire en mémoire).
  • Runner de test natif : prise en charge de context.log() et ajout de l'événement test:log pour améliorer la collecte de journaux lors de l'exécution des tests.

Enfin, cette version met à jour plusieurs dépendances clés, notamment l'outil d'administration de paquets npm 11.19.0, le moteur de base de données embarqué SQLite 3.53.4 et les certificats racines NSS 3.125.