La dernière version du runtime pour JavaScript rival de Node.js, TypeScript et WebAssembly, prend en charge package.json. C’est l'une des nombreuses améliorations destinées à faciliter la transition des développeurs à partir de projets Node.js existants. Désormais, Deno va détecter automatiquement le package.json et l'utiliser pour installer et résoudre les dépendances utilisées. Il faciltera aussi l'exécution de scripts spécifiques au projet définis dans la section scripts avec la tâche deno. Cependant, le support actuel est limité aux scripts simples. Des programmes tels que rimraf ou cross-env ne fonctionnent pas encore, mais leur prise en charge sera ajoutée dans une prochaine version.

Deno 1.31 stabilise également la Node-API (N-API). Les développeurs n'ont plus besoin d'utiliser le drapeau unstable lorsqu'ils utilisent des paquets npm, le gestionnaire de paquets officiel du framework open source Node.js, qui reposent sur cette API. De nombreuses corrections de bogues ont été appliquées à Node-API et l’on peut utiliser sans problème un plus grand de paquets. Les bogues restants seront corrigés dans les semaines à venir.

Une compatibilité améliorée avec Node.js

Par ailleurs, Deno 1.31 déplace la couche de compatibilité pour Node.js directement dans le runtime Deno. Auparavant, la compatibilité pour Node.js était assurée par l'utilisation de https:/deno.land/std.node, une collection de polyfills dans le code userland de la bibliothèque standard de Deno. Comme la dépendance à l'égard de https://deno.land/std était accrue à chaque version de Deno, la couche de compatibilité devait être téléchargée après chaque mise à niveau. Désormais, la couche de compatibilité est intégrée au runtime et des instantanés du moteur JavaScript V8 sont utilisés pour réduire le temps de démarrage. Cette intégration plus étroite facilite le polyfilling des API manquantes et améliore les performances des modules Node.js intégrés. Pour utiliser les polyfills intégrés, les développeurs peuvent importer à partir de node: specifiers.

Dévoilée le 24 février, Deno 1.31 est téléchargeable via deno upgrade pour les utilisateurs actuels. Les autres options d'installation sont répertoriées sur GitHub. Deno 1.31 fait suite à la publication, le mois dernier, de Deno 1.30, qui améliorait la prise en charge des modules Node.js.

Autres changements apportés par Deno 1.31

Plusieurs évolutions supplémentaires sont intégrées dans la version 1.31 de Deno.

- Les pointeurs sont dorénavant représentés comme des objets simples, ou null pour les pointeurs null. Ces objets sont créés par V8 et pris en charge par V8 Fast API, ce qui améliore les performances de la FFI (Foreign Function Interface) quand on travaille avec des paramètres et des valeurs de retour de type « pointeur » des versions précédentes. Les objets « pointeur » sont opaques et ne peuvent pas être manipulés directement à partir de JavaScript. Ainsi, l'utilisation de la fonction FFI devient plus sûre, l'usurpation de pointeurs n'étant plus aussi simple que l'écriture d'un nombre en JavaScript. À noter que l'API FFI est instable.

- Les API Deno.Command et Deno.osUptime() sont désormais stabilisées. Il est conseillé aux développeurs de migrer de l'API Deno.run() vers Deno.Command.

- L'API Deno.build.os renvoie désormais davantage de variantes pour les systèmes d'exploitation, tels que « darwin », « linux », « windows » et « solaris ».

- Pour la bibliothèque standard, les modules pour https://deno.land/std/node ont été supprimés. Ce code est dorénavant directement intégré dans le runtime Deno.

- Pour l'interface de commande, la commande deno bundle n'est plus prise en charge et n'apparaîtra pas dans l'aide en sortie.

- Toujours pour l'interface CLI, deno benchcode accepte désormais un drapeau --json qui permet d'imprimer les résultats des tests de référence au format JSON.

- L'invite de permission interactive accepte maintenant une nouvelle option, A. Celle-ci permet d'accorder la permission pour les appels ultérieurs aux APIs utilisant le domaine accordé.

- deno compile comprend maintenant les importations dynamiques pouvant être résolues au moment de la compilation.