La version 1.28 de Deno a Ă©tĂ© prĂ©sentĂ©e, une plateforme pour l'exĂ©cution isolĂ©e d'applications en JavaScript et TypeScript, qui peut ĂȘtre utilisĂ©e pour crĂ©er des gestionnaires fonctionnant sur serveur. La plateforme est dĂ©veloppĂ©e par Ryan Dahl, le crĂ©ateur de Node.js. Comme dans Node.js, Deno utilise le moteur JavaScript V8, Ă©galement utilisĂ© dans les navigateurs basĂ©s sur Chromium. Cependant, Deno n'est pas une branche de Node.js, mais un projet entiĂšrement nouveau créé de zĂ©ro. Le code du projet est distribuĂ© sous la licence MIT. Des builds ont Ă©tĂ© prĂ©parĂ©s pour Linux, Windows et macOS.
Le projet Deno a Ă©tĂ© créé pour offrir aux utilisateurs un environnement plus sĂ©curisĂ© et pour corriger les erreurs conceptuelles prĂ©sentes dans l'architecture de Node.js. Pour amĂ©liorer la sĂ©curitĂ©, l'enveloppe autour du moteur V8 est Ă©crite en Rust, permettant d'Ă©viter de nombreuses vulnĂ©rabilitĂ©s rĂ©sultant d'un accĂšs bas niveau Ă la mĂ©moire. Pour le traitement des requĂȘtes en mode non-bloquant, la plateforme Tokio, Ă©galement Ă©crite en Rust, est utilisĂ©e. Tokio permet de crĂ©er des applications hautes performances basĂ©es sur une architecture orientĂ©e Ă©vĂ©nements, prenant en charge le multithreading et le traitement asynchrone des requĂȘtes rĂ©seau.
Le changement clé dans cette nouvelle version est la stabilisation de la compatibilité avec les packages hébergés dans le dépÎt NPM, ce qui permet d'utiliser plus de 1,3 million de modules créés pour la plateforme Node.js dans Deno. Par exemple, dans les applications basées sur Deno, il est maintenant possible d'utiliser des modules tels que Prisma, Mongoose et MySQL pour organiser un accÚs permanent aux données, ainsi que des frameworks pour faire fonctionner des front-ends comme React et Vue. Certains modules NPM restent pour l'instant incompatibles avec Deno, notamment en raison de dépendances à des éléments environnementaux spécifiques à Node.js, tels que le fichier package.json. De plus, il n'est pas encore possible d'utiliser la commande « deno compile » avec des modules NPM. Des futures versions devraient viser à éliminer ces incompatibilités et restrictions.
Le support du modĂšle prĂ©cĂ©dent utilisĂ© dans Deno, basĂ© sur le systĂšme de modules ECMAScript et l'API Web, est maintenu au mĂȘme niveau, et pour l'importation de modules NPM, le schĂ©ma de chargement basĂ© sur l'URL familier Ă Deno est utilisĂ©. Un prĂ©fixe d'URL spĂ©cial « npm: » est prĂ©vu pour accĂ©der aux modules NPM, pouvant ĂȘtre utilisĂ© de maniĂšre similaire aux modules Deno ordinaires. Par exemple, pour importer un module NPM, vous pouvez Ă©crire 'import { chalk } from «npm:chalk@5»;', et pour exĂ©cuter un script NPM depuis la ligne de commande â «deno run âallow-env âallow-read npm:create-vite-extra».
L'utilisation des paquets NPM dans Deno est considĂ©rablement plus simple que dans Node.js, car il n'est pas nĂ©cessaire d'installer les modules au prĂ©alable (les modules sont installĂ©s lors de la premiĂšre exĂ©cution de l'application), le fichier package.json n'est pas utilisĂ© et le rĂ©pertoire node_modules n'est pas utilisĂ© par dĂ©faut (les modules sont mis en cache dans un rĂ©pertoire commun, mais il est possible de revenir au comportement ancien en utilisant l'option « ânode-modules-dir »).
Dans les applications basĂ©es sur NPM, il est possible d'utiliser les mĂ©canismes fournis par Deno pour la gestion des accĂšs, l'isolation et l'activation des fonctionnalitĂ©s Ă©tendues influant sur la sĂ©curitĂ©. Pour contrer les attaques via des dĂ©pendances douteuses, Deno bloque par dĂ©faut toutes les tentatives d'accĂšs au systĂšme Ă partir des dĂ©pendances et gĂ©nĂšre un avertissement sur les problĂšmes dĂ©tectĂ©s. Par exemple, lorsqu'un module tente d'accĂ©der en Ă©criture Ă /usr/bin/, une demande de confirmation de cette opĂ©ration sera affichĂ©e : deno run npm:install-malware â ïž â Deno demande l'accĂšs en Ă©criture Ă /usr/bin/. â DemandĂ© par `install-malware` â ExĂ©cutez Ă nouveau avec âallow-write pour passer cette invite. â Autoriser ? [y/n] (y = oui, autoriser ; n = non, refuser) >
Parmi les améliorations non liées dans NPM, la nouvelle version mentionne la mise à jour du moteur V8 à la version 10.9, la détection automatique des fichiers de verrouillage, la stabilisation des API Deno.bench(), Deno.gid(), Deno.networkInterfaces(), Deno.systemMemoryInfo() et Deno.uid(), ainsi que l'ajout d'une nouvelle API instable Deno.Command() pour exécuter des commandes (substitution universelle de Deno.spawn, Deno.spawnSync et Deno.spawnChild).
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 fourni 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 pour votre plateforme, d'environ 30 Mo, sans dĂ©pendances externes et ne nĂ©cessitant aucune 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 ».
- 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 d'application peuvent ĂȘtre combinĂ©s en un seul fichier JavaScript.
Source : opennet.ru
