Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?

70 vues

Publié le

Le créateur de NodeJS, Ryan Dahl, a décidé de créer un nouveau runtime pour Javascript : Deno. Son but ? Eliminer les erreurs et maladresses de son grand frère. Découvrez ce qui se cache derrière ainsi que la vision de son créateur.

Par Maxime Pichou, développeur Back/Cloud chez Xebia

Toutes les informations sur xebicon.fr

Publié dans : Technologie
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?

  1. 1. @Xebiconfr #Xebicon18 @_maxpch @modulom Build the future Deno, le nouveau Node.js qui inverse la tendance ? Maxime Pichou, développeur Back/Cloud Antoine Le Taxin, développeur full stack JS
  2. 2. @Xebiconfr #Xebicon18 @_maxpch @modulom Qui sommes-nous ? Maxime Pichou Développeur Back/Cloud Antoine Le Taxin Développeur full stack JS @modulom@_maxpch
  3. 3. @Xebiconfr #Xebicon18 @_maxpch @modulom De quoi allons nous parler ? 1. NodeJS et son créateur 2. Les erreurs de NodeJS 3. Les promesses de Deno 4. Quelques exemples 5. Conclusion
  4. 4. @Xebiconfr #Xebicon18 @_maxpch @modulom NodeJS et son créateur
  5. 5. @Xebiconfr #Xebicon18 @_maxpch @modulom Les origines de Deno ● Ryan Dahl ● Créateur de Node.js ● Conférence de JS Conf Berlin en Juin 2018 En résumé : ● NodeJS ● Deno
  6. 6. @Xebiconfr #Xebicon18 @_maxpch @modulom V8 engine fs http os path ● Première version en 2009 ● Écrit en C++ ● Environnement exécutable pour JavaScript ● Utilisation de NPM pour la gestion des dépendances
  7. 7. @Xebiconfr #Xebicon18 @_maxpch @modulom Les erreurs de NodeJS « node_modules are heaviest objects in the universe » Ryan Dalh
  8. 8. @Xebiconfr #Xebicon18 @_maxpch @modulom Gestion des dépendances ● Seulement un repository centralisé pour les modules (qui est privé) ● Trop de dépendances vers les modules : ■ Le fichier javascript ■ Le package.json ■ Le dossier node_modules local ■ Le module dans la BDD de NPM ● Trop de boilerplate pour gérer les dépendances
  9. 9. @Xebiconfr #Xebicon18 @_maxpch @modulom Build System ● Depuis 2012, NodeJS utilise GYP (Generate Your Project) ● GYP créé par Chromium Project et utilisé pour V8 engine ● En 2016, Google passe à GN (Generate Ninja) ● NodeJS décide de rester sur GYP à tort
  10. 10. @Xebiconfr #Xebicon18 @_maxpch @modulom Et d’autres regrets ● Le fichier index.js ● Le require sans extension ● Ne meurt jamais sur les « uncaught errors » ● Les applications ne sont pas sécurisées
  11. 11. @Xebiconfr #Xebicon18 @_maxpch @modulom Les ambitions de Deno
  12. 12. @Xebiconfr #Xebicon18 @_maxpch @modulom Les promesses de Deno ● Support natif de TypeScript 3.0 ● Sécurité en mode sandbox d’une application ● Embarquement du moteur V8 7.0 de Chrome ● Gestion des dépendances simplifiées ● Support de await au plus haut niveau ● Compatibilité avec les navigateurs (browser) ● Meurt sur les « uncaught errors »
  13. 13. @Xebiconfr #Xebicon18 @_maxpch @modulom ● Typescript : gestion de la public API ● Rust : partie bas niveau de Deno ● C++ : pour le binding avec V8 ● Python : pour de l’utilitaire, du testing ... Langages utilisés
  14. 14. @Xebiconfr #Xebicon18 @_maxpch @modulom Deno, où ça en est ?
  15. 15. @Xebiconfr #Xebicon18 @_maxpch @modulom Avancement de Deno Lorsque notre présentation a été retenue pour la Xebicon
  16. 16. @Xebiconfr #Xebicon18 @_maxpch @modulom Avancement de Deno Lorsque nous nous sommes plongés dans la documentation et vu l’état d’avancement du projet
  17. 17. @Xebiconfr #Xebicon18 @_maxpch @modulom Avancement de Deno ● Deno est très jeune (à peine 6 mois) ● Pas beaucoup de fonctionnalités finies ● Cependant très actif (une release toutes les semaines environ) ● Pas encore de date de sortie officielle
  18. 18. @Xebiconfr #Xebicon18 @_maxpch @modulom Deno et la sécurité - Allow write import { mkdir, args } from "deno"; const directoryName = args[1]; createDirectory(directoryName) .then(() => console.log("done")) .catch(error => console.error(error)); async function createDirectory(path : string) { await mkdir(path); } deno --allow-write mkdir_example.ts xebicon PermissionDenied: permission denied at maybeError (deno/js/errors.ts:25:12) at handleAsyncMsgFromRust (deno/js/dispatch.ts:19:15) Sans --allow-write
  19. 19. @Xebiconfr #Xebicon18 @_maxpch @modulom Deno et la sécurité - Allow network async function main() { const response = await fetch("https://xebicon.fr/"); console.log(`status = ${response.status}`); } main(); PermissionDenied: permission denied at maybeError (deno/js/errors.ts:25:12) at handleAsyncMsgFromRust (deno/js/dispatch.ts:19:15) Sans --allow-net deno --allow-net fetch_response.ts
  20. 20. @Xebiconfr #Xebicon18 @_maxpch @modulom Deno et les modules ● Système d’import par URL ● Incompatible avec CommonJs ● Compatible avec l’import ESM ou AMD import { someModule } from "https://unpkg.com/somemodule@2.1.3/somemodule.ts";
  21. 21. @Xebiconfr #Xebicon18 @_maxpch @modulom Deno et await ● Objectif de supporter await au plus haut niveau ● Difficulté pour trouver une solution en accord avec TS import { mkdir, args } from "deno"; const directoryName : string = args[1]; await mkdir(directoryName);
  22. 22. @Xebiconfr #Xebicon18 @_maxpch @modulom C’est quoi la suite ?
  23. 23. @Xebiconfr #Xebicon18 @_maxpch @modulom Deno demain Roadmap : ● TCP Server ● Lister les dépendances ● Public API (I/O, setTimeout etc) ● Binding infrastructure entre V8 et libdeno ● Await au plus haut niveau
  24. 24. @Xebiconfr #Xebicon18 @_maxpch @modulom Deno inverse-t-il vraiment la tendance face à NodeJS ? ● Beaucoup plus sécurisé ● Typescript natif ● Gestion des dépendances simplifiée ● Utilisation du build system GN ● Promesse de compatibilité avec les browsers Point positif : Point d’attention : ● Incompatible avec NodeJS ● La gestion des dépendances est elle adaptée sur de gros projet ? ● Gestion des droits trop binaire
  25. 25. @Xebiconfr #Xebicon18 @_maxpch @modulom Merci !

×