Contexte et motivations

Après plusieurs mois d’utilisation de Deno, l’auteur a migré un projet SvelteKit vers Node.js version 26.10.0. Il souligne que les API ECMAScript sont désormais entièrement prises en charge et que les anciennes fonctions « require() » ont disparu, ce qui simplifie le code. La décision est également motivée par des problèmes rencontrés avec Deno, notamment une intégration ZSH défaillante et une limitation du registre JSR qui renvoie un code 429 lors de requêtes HTTP concurrentes.

Gestion des paquets et sécurité

Le texte décrit le passage de NVM à Fast Node Manager (FNM) pour la gestion des versions, ainsi que le choix de PNPM afin d’éviter les scripts post‑install potentiellement dangereux. L’auteur ajoute deux alias pour masquer les binaires NPM :

alias npm = pnpm
alias npx = pnpx

Dans le fichier pnpm-workspace.yaml, il a configuré les politiques suivantes :

minimumReleaseAge: 1440
trustPolicy: no-downgrade

Le paramètre minimumReleaseAge a d’abord été fixé à un mois, mais a provoqué des conflits de dépendances, ce qui a conduit à le réduire à un jour. Cette configuration empêche les mises à jour automatiques jugées non fiables.

Support TypeScript et limitations

Node 26.10.0 permet d’exécuter du TypeScript, mais refuse de traiter les fichiers .ts situés sous node_modules. L’erreur retournée est :

error: [ERR_UNSUPPORTED_NODE_MODULES_TYPE_STRIPPING]: Stripping types is currently unsupported for files under node_modules

Cette restriction, décrite comme « philosophique plutôt que technique », vise à éviter la propagation de paquets écrits en TypeScript, un produit Microsoft. L’auteur mentionne l’utilisation de tsdown et de deux fichiers de configuration supplémentaires pour contourner ce blocage, tout en soulignant la perte de provenance lorsqu’il héberge ses propres paquets sur une instance Forgejo.

Migration et performances

La migration du générateur de site statique de Deno vers Node a nécessité uniquement le remplacement de l’API de système de fichiers (Deno.readFile → node:fs) et de Deno.serve par l’adaptateur Node de Hono, qui encapsule node:http. Le remplacement de Deno.@std/path par node:path s’est fait par un simple swap d’import. Après ces ajustements, les temps de construction ont été réduits de 15 % selon les mesures de l’auteur. Il note que le code conserve encore des idiomes Deno, laissant une marge d’optimisation supplémentaire.