La version 2.0 de la plateforme Deno a été publiée, destinée à l'exécution isolée d'applications serveur en JavaScript et TypeScript utilisant le moteur V8, employé dans les navigateurs basés sur Chromium. Le projet Deno est développé par Ryan Dahl, le créateur de Node.js, dans le but de fournir un environnement plus sécurisé et de corriger les erreurs conceptuelles commises dans l'architecture de Node.js. Pour renforcer la sécurité, la couche autour du moteur V8 est écrite en Rust, et la plateforme Tokio est utilisée pour le traitement des requêtes de manière non bloquante. Le code du projet est distribué sous la licence MIT. Des builds ont été préparées pour Linux, Windows et macOS.
Lors de la préparation de la nouvelle branche, l'accent a été mis sur la compatibilité avec l'ancienne infrastructure JavaScript et l'élargissement du spectre des projets JavaScript supportés sans compromettre la sécurité. Parmi les modifications :
- La rétrocompatibilité avec Node.js et npm a été mise en œuvre, permettant l'exécution d'applications non modifiées conçues pour Node.js. La prise en charge de Node.js permet également de migrer progressivement des projets existants de Node.js vers Deno ou d'intégrer des dépendances provenant de NPM dans les projets Deno en spécifiant le préfixe «npm :» lors de l'importation des paquets dans deno.json.
- Un support intégré pour le fichier package.json et le répertoire des modules node_modules utilisés dans Node.js a été ajouté.
- Le support pour les dépôts NPM privés, définis à travers des fichiers «.npmrc», a été assuré.
- La prise en charge des frameworks JavaScript populaires tels que Next.js, Astro, Remix, Angular, SvelteKit et QwikCity a été ajoutée.
- La prise en charge des espaces de travail npm (workspace) et des mono-repo (monorepo) avec un traitement séparé des dépendances a été ajoutée.
- De nouvelles commandes de gestion des paquets ont été ajoutées : «deno install» pour installer des dépendances, «deno add» pour ajouter des paquets à package.json ou deno.json, «deno remove» pour supprimer des paquets. Il est à noter que «deno install» fonctionne environ 15 fois plus vite que npm en l'absence de paquets dans le cache et 90 % plus vite lorsque le paquet est dans le cache (les répertoires node_modules et le cache global propre sont pris en charge).
- La bibliothèque standard a été stabilisée.
- Un long cycle de support (LTS) a été assuré.
- JSR — un dépôt de bibliothèques JavaScript et TypeScript, qui peuvent être utilisées dans divers environnements d'exécution JavaScript, a été introduit.
- L'équipe «deno fmt» a introduit la possibilité de formater des contenus dans les formats HTML, CSS et YAML.
- La commande « deno lint » a été ajoutée avec le support de règles et corrections spécifiques à Node.js.
- La commande « deno test » permet maintenant d'exécuter des tests écrits avec node:test.
- La commande « deno task » prend en charge l'exécution de scripts via package.json.
- La commande « deno compile » offre la possibilité de signer numériquement le code.
- La commande « deno serve » a introduit la possibilité de paralléliser les opérations des serveurs HTTP en utilisant plusieurs cœurs de CPU.
- La commande « deno coverage » prend en charge l'enregistrement des rapports au format HTML.
- Des optimisations de performance ont été réalisées.

Principales caractéristiques de Deno :
- Orientation vers la sécurité dans la configuration par défaut. Les accès aux fichiers, les fonctionnalités réseau et l'accès aux variables d'environnement par défaut sont bloqués et nécessitent une activation explicite. Les applications par défaut s'exécutent dans des environnements sandbox isolés et ne peuvent pas accéder aux fonctionnalités système sans autorisations explicites.
- Prise en charge intégrée de TypeScript en plus de JavaScript. Pour la vérification des types et la génération de JavaScript, le compilateur TypeScript natif est utilisé, ce qui entraîne une baisse de performances par rapport à l'analyse de JavaScript dans V8 ;
- Le runtime est livré sous la forme d'un fichier exécutable autonome (« deno »). Pour exécuter des applications avec Deno, il suffit de télécharger un fichier exécutable d'environ 40 Mo, sans dépendances externes et sans nécessiter une installation particulière dans le système. Deno n'est pas une application monolithique, mais une collection de paquets crate en Rust (deno_core, rusty_v8) qui peuvent être utilisés séparément.
- Lors de l'exécution d'un programme, ainsi que pour le chargement de modules, l'adressage via URL peut être utilisé. Par exemple, pour exécuter le programme welcome.js, la commande « deno https://deno.land/std/examples/welcome.js » peut être utilisée. Le code provenant de ressources externes est téléchargé et mis en cache sur le système local, mais n'est jamais mis à jour automatiquement (pour une mise à jour, il est nécessaire de lancer explicitement l'application avec le drapeau « --reload »).
- Traitement efficace des requêtes réseau HTTP dans les applications, la plateforme est conçue pour créer des applications réseau très performantes.
- Possibilité de créer des applications web universelles pouvant s'exécuter à la fois dans Deno et dans un navigateur web classique.
- Une suite standard de modules est disponible, dont l'utilisation ne nécessite pas de liens avec des dépendances externes. Les modules de la collection standard ont été soumis à un audit supplémentaire et à une vérification de compatibilité.
- En plus du runtime, la plateforme Deno sert également de gestionnaire de paquets et permet de référencer des modules par URL dans le code. Par exemple, pour charger un module, vous pouvez spécifier dans le code « import * as log from «https://deno.land/std/log/mod.ts ». Les fichiers téléchargés à partir de l'URL sont mis en cache. serveurs La liaison aux versions des modules est déterminée par les numéros de version spécifiés dans l'URL, par exemple, « https://unpkg.com/liltest@0.0.5/dist/liltest.js ».
- Orientation vers l'utilisation des standards Web, support de Promise, fetch et des modules ECMAScript.
- Compatibilité avec les paquets hébergés dans le dépôt NPM et conçus pour la plateforme Node.js.
- Le système d'inspection des dépendances (commande « deno info ») et un utilitaire de formatage de code (deno fmt) sont intégrés.
- Tous les scripts de l'application peuvent être regroupés dans un seul fichier JavaScript.
Source : opennet.ru

