Deno 2.6, la dernière version du runtime moderne pour JavaScript et TypeScript, vient d'être publiée. Cette mise à jour introduit un nouvel outil, dx, qui s'aligne sur le workflow npx utilisé dans les projets Node.js, et offre une vérification des types TypeScript plus rapide grâce au moteur expérimental tsgo, écrit en langage Go. Deno 2.6 étend également la compatibilité avec Node.js, renforce la sécurité des projets grâce à un contrôle plus granulaire des autorisations et apporte plusieurs autres améliorations.Deno est un environnement d'exécution (runtime) pour JavaScript, TypeScript et WebAssembly basé sur le moteur JavaScript V8 et le langage de programmation Rust. Deno a été co-créé par Ryan Dahl, le créateur de Node.js, et Bert Belder. Deno assume explicitement le rôle à la fois d'environnement d'exécution et de gestionnaire de paquets au sein d'un seul exécutable, plutôt que de nécessiter un programme de gestion de paquets séparé.
Deno 2.6 est la dernière mise à jour de ce runtime JavaScript et TypeScript moderne. Le nouvel outil dx, qui constitue l'un des points forts de cette version, permet aux développeurs d'exécuter facilement des binaires à partir de paquets npm et JSR, en s'alignant étroitement sur le workflow npx utilisé dans les projets Node.js. Dans le but d'accélérer le développement, Deno 2.6 intègre désormais tsgo, un vérificateur de types TypeScript expérimental écrit en Go, qui offre une vitesse de vérification des types nettement améliorée par rapport à l'ancien système basé sur TypeScript.
Tout en apportant des changements majeurs au flux de travail, les couches de sécurité et de compatibilité de Deno ont également évolué. Cette version ajoute le drapeau --require pour précharger les modules CommonJS, renforçant ainsi la compatibilité avec les flux de travail Node.js. Le contrôle granulaire des autorisations renforce la sécurité des projets, et la sous-commande deno audit vérifie les dépendances par rapport à la base de données GitHub Common Vulnerabilities and Exposures (CVE), produisant des rapports de sécurité pour les paquets JSR et npm.
Exécuter les binaires de paquets avec dx
Deno 2.6 introduit un nouvel outil, dx, qui est équivalent à npx et constitue un moyen pratique d'exécuter les binaires des paquets npm et JSR.
| Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 | $ dx cowsay "Hello, Deno!"
______________
< Hello, Deno! >
--------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| || |
Les utilisateurs doivent veiller à installer l'alias dx : deno x --install-aliasLes utilisateurs plus expérimentés remarqueront que dx fonctionne de manière similaire à deno run, mais avec les différences suivantes :
- dx utilise par défaut les autorisations --allow-all, sauf si un autre indicateur d'autorisation est transmis.
- dx invite l'utilisateur avant de télécharger un paquet.
- dx exécute automatiquement les scripts de cycle de vie si l'utilisateur accepte l'invite susmentionnée.
- dx utilise par défaut npm:<nom_du_paquet> sauf indication contraire.
- dx génère une erreur si l'utilisateur tente de l'utiliser pour exécuter un fichier local.
Avec l'ajout de dx, les utilisateurs devraient trouver plus facile d'exécuter les binaires des paquets de la manière habituelle. Ils peuvent profiter de la commodité de npx tout en tirant parti du modèle de sécurité robuste et des optimisations de performances de Deno.
Contrôle plus granulaires des autorisations
Cette version offre un contrôle plus granulaire des autorisations. Deno 2.6 introduit les flags --ignore-read et --ignore-env, qui permettent d'ignorer de manière sélective certaines lectures de fichiers ou certains accès à des variables d'environnement. Au lieu de générer une erreur NotCapable, les utilisateurs peuvent demander à Deno de renvoyer respectivement une erreur NotFound et undefined.
Voyons un exemple de fonctionnement :
| Code typescript : | Sélectionner tout |
1 2 3 4 5 | const awsSecretKey = Deno.env.get("AWS_SECRET_KEY"); console.log(awsSecretKey); const passwd = await Deno.readTextFile("/etc/passwd"); console.log(passwd); |
| Code : | Sélectionner tout |
1 2 3 4 5 6 7 | $ deno run --ignore-read=/etc --ignore-env=AWS_SECRET_KEY main.ts
undefined
error: Uncaught (in promise) NotFound: No such file or directory (os error 2)
const passwd = await Deno.readTextFile("/etc/passwd");
^
at Object.readTextFile (ext:deno_fs/30_fs.js:799:24)
at file:///dev/main.ts:4:27 |
Ces nouveaux indicateurs offrent davantage de flexibilité lors de l'exécution de code non fiable. Souvent, le développeur ne souhaite pas ouvrir un sandbox, mais une certaine dépendance insiste pour lire 20 variables d'environnement ou fichiers de configuration à partir de son répertoire personnel. Ces dépendances gèrent correctement les variables d'environnement ou les fichiers manquants, mais elles ne sont pas en mesure de gérer les erreurs NotCapable de Deno. Grâce à ces nouveaux flags, il est possible d'exécuter ce type de code sans accorder toutes les autorisations.
De plus, Deno.env.toObject() fonctionne désormais avec des autorisations d'environnement partielles. Si le développeur n'accorde l'accès qu'à un sous-ensemble de variables d'environnement, Deno.env.toObject() ne renverra que les variables autorisées.
| Code typescript : | Sélectionner tout |
console.log(Deno.env.toObject());
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.