IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Deno 2.6, la dernière version du runtime JavaScript et TypeScript moderne, est disponible avec l'outil dx, un contrôle plus granulaire des autorisations et une vérification des types TypeScript plus rapide

Le , par Anthony

5PARTAGES

6  0 
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.

https://youtu.be/KPTOo4k8-GE

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());


Code : Sélectionner tout
1
2
$ SOME_SECRET=foo deno run --allow-env=SOME_SECRET main.ts 
{ SOME_SECRET: "foo" }

Cette version comprend également un courtier d'autorisations expérimental. Il s'agit d'une nouvelle fonctionnalité qui permet un contrôle avancé des autorisations grâce à un processus distinct chargé de gérer les demandes d'autorisation.

Code : Sélectionner tout
$ DENO_PERMISSION_BROKER_PATH=/perm_broker.sock deno run untrusted_code.ts

Cela peut être utile pour les auteurs de plateformes qui souhaitent exécuter du code non fiable, mais qui disposent d'un processus de niveau supérieur pour gérer les demandes d'autorisation.

Lorsque le courtier d'autorisations est actif, tous les indicateurs d'autorisation --allow-*, --deny-* et --ignore-* sont ignorés, et toutes les demandes d'autorisation sont envoyées au processus du courtier à la place.

Vérification des types plus rapide grâce à tsgo et aux améliorations apportées au langage serveur

Deno 2.6 intègre tsgo, un nouveau vérificateur de types expérimental pour TypeScript écrit en Go. Ce nouveau vérificateur de types est nettement plus rapide que la précédente implémentation, qui était écrite en TypeScript.

tsgo peut être activé en utilisant le drapeau --unstable-tsgo ou la variable d'environnement DENO_UNSTABLE_TSGO=1 avec deno check :

Code : Sélectionner tout
$ deno check --unstable-tsgo main.ts

L'équipe de Deno a constaté une amélioration de 2 fois la vitesse des temps de vérification des types pour les projets internes lors de l'utilisation de TSGO.

Du côté de la vérification des types, plusieurs points faibles de longue date ont été corrigés. Deno est désormais plus tolérant envers les schémas d'importation non standard et les déclarations de modules ambiants nus, ce qui signifie moins d'erreurs de faux positifs lors de l'utilisation d'outils de framework ou de chargeurs de modules personnalisés.

La prise en charge des options courantes de tsconfig.json a également été améliorée :

  • compilerOptions.paths fonctionne désormais comme prévu pour la résolution des modules,
  • skipLibCheck est respecté pour les erreurs de graphe,
  • les paramètres avancés tels que isolatedDeclarations sont pris en charge.

Ces améliorations contribuent à une expérience de vérification plus prévisible, en particulier dans les espaces de travail multi-paquets.

Le langage serveur (LSP) a également bénéficié de quelques améliorations en termes de qualité de vie. L'action source.organizeImports est désormais prise en charge, ce qui permet de trier et de nettoyer automatiquement les importations depuis l'éditeur. Deno utilisera l'implémentation native de l'éditeur lorsqu'elle est disponible et évitera tout travail de résolution inutile, rendant ainsi la fonctionnalité plus intuitive. La création de tests est également améliorée grâce à une meilleure intégration des fonctions de test du style describe et it. Les éditeurs peuvent désormais comprendre et afficher des informations sur les cas de test individuels.

Plusieurs corrections en arrière-plan rendent le langage serveur moins intrusif : les mises à jour de configuration sont détectées immédiatement lorsque tsconfig.json change, les fichiers de verrouillage ne sont pas écrits pendant le « cache on save » et les directives lint-ignore se comportent de manière plus cohérente avec les commentaires en tête. Ces améliorations réduisent les frictions et permettent aux outils de langage de ne pas gêner l'utilisateur pendant que son travail.

Exécuter CommonJS avec --require

Deno v2.4 est livré avec le drapeau --preload qui permet de charger des fichiers avant d'exécuter le module principal, ce qui permet de personnaliser l'environnement d'exécution.

Cette version ajoute le flag --require qui sert le même objectif, mais qui est destiné à l'exécution de modules CommonJS plutôt que de modules ES.

Code : Sélectionner tout
$ deno run --require ./setup.cjs main.ts

Cela rapproche Deno de la compatibilité Node.js en prenant en charge un modèle commun pour le préchargement des modules.

Audit de sécurité avec deno audit

L'une des nouveautés les plus importantes est la nouvelle sous-commande deno audit, qui aide les développeurs à identifier les...
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.

Une erreur dans cette actualité ? Signalez-nous-la !