Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Building Native TypeScript applications using Deno - Devoxx Ukraine 2019

Building Native TypeScript applications using Deno - Devoxx Ukraine 2019

You probably already know that TypeScript is great. But do you know about Deno? Deno is what NodeJS should have been. Deno is a secure JavaScript/TypeScript runtime built with V8 & Rust. It was created by the original creator of NodeJS. It is aimed to be the better alternative for NodeJS. Ryan Dahl aims to fix issues in NodeJS with Deno. In this talk, we will see what Deno is and why it is better than NodeJS for TypeScript native applications.


Deepu K Sasidharan

November 02, 2019


  1. @deepu105 #devoxxUkraine By Deepu K Sasidharan, XebiaLabs November 2, 2019

    Building Native TypeScript applications using Deno
  2. @deepu105 #devoxxUkraine About Me Deepu K Sasidharan OSS aficionado Co-lead

    Senior developer Robotics & Astronomy enthusiast https://www.packtpub.com/application-development/full-stack-development-jhipster
  3. @deepu105 #devoxxUkraine About XebiaLabs

  4. @deepu105 #devoxxUkraine What about you? How many of you are

    JavaScript developers? How many are web developers? Who likes TypeScript more than JavaScript? Any NodeJS application developers?
  5. @deepu105 #devoxxUkraine What about you? Have you heard of Deno?

  6. @deepu105 #devoxxUkraine What is Deno? A modern JavaScript/TypeScript runtime &

    scripting environment Created by Ryan Dahl(Creator of NodeJS) in 2018 Built with V8, Rust and Tokio Secure by default Built in tooling Execute remote scripts Lightweight multi-platform executable(~10MB) Many inspirations from Go and Rust https://deno.land/
  7. Does not use NPM No more node_modules hell!

  8. None
  9. @deepu105 #devoxxUkraine

  10. @deepu105 #devoxxUkraine What is TypeScript A strict syntactical superset of

    JavaScript - upto ES2019(ES10) JavaScript that scales Optional static typing support Transpiles to JavaScript Maintained by Microsoft with major collaboration from Google Great editor and IDE support
  11. @deepu105 #devoxxUkraine Why

  12. @deepu105 #devoxxUkraine Why TypeScript Type safety and Type inference Great

    IDE support Easier refactoring Better linting and error identification Features from the Future Additional language features Much better code style
  13. I hate transpiling my code, but if have to do

    so I’ll do it with TypeScript
  14. Getting started!

  15. @deepu105 #devoxxUkraine Install Deno brew install deno or cargo install

    deno_cli or curl -fsSL https://deno.land/x/install/install.sh | sh Or using PowerShell iwr https://deno.land/x/install/install.ps1 -useb | iex
  16. Main features

  17. @deepu105 #devoxxUkraine Execute remote scripts deno https://deno.land/std/examples/welcome.ts

  18. @deepu105 #devoxxUkraine Secure by default Scripts can't access files, the

    environment, subprocesses or the network unless specifically allowed by the script during execution or with flags --allow-all --allow-env --allow-write --allow-net --allow-run • Granular permissions • Permissions can be revoked • Permissions whitelist support
  19. @deepu105 #devoxxUkraine Secure by default

  20. @deepu105 #devoxxUkraine Standard modules • colors - ANSI colors on

    console • datetime - Datetime parse utilities • encoding - Read CSV & TOML • flags - CLI argument parser • fs - Filesystem API • http - HTTP server framework • log - Logging framework • media_types - Resolve media types • prettier - Prettier formatting API • strings - String utils • testing - Testing utils • uuid - UUID support • ws - Websocket client/server
  21. @deepu105 #devoxxUkraine Supports only ES Modules • require() is not

    supported, so no confusion with import syntax • No "magical" module resolution • Third party modules are imported by URL(Local and remote) • Remote code is fetched only once and catched globally for later use • Remote code is considered immutable and never updated unless --reload flag is used • Dynamic imports • Supports import maps • Third party modules in https://deno.land/x/ • NPM modules can be used if required as simple local file URL or from https://jspm.io/ or https://www.pika.dev/
  22. @deepu105 #devoxxUkraine Supports only ES Modules

  23. @deepu105 #devoxxUkraine Built in tooling • dependency inspector (deno info)

    • Bundler (deno bundle) • Installer (deno install) • Test runner (deno test) • Type info (deno types) • code formatter, uses prettier (deno fmt) • linter [planned] (deno lint) • Debugger [planned] (--debug)
  24. @deepu105 #devoxxUkraine Browser compatibility • Deno programs which are written

    completely in JavaScript and do not use the global Deno • Deno programs in Typescript bundled into JavaScript and do not use the global Deno
  25. @deepu105 #devoxxUkraine Async actions return promise • No call back

    hell • Consistent API across the standard modules • Works great with async/await
  26. @deepu105 #devoxxUkraine Top level await • Simplifies code • Makes

    code more readable • Works great with Deno async API
  27. @deepu105 #devoxxUkraine Web assembly support https://wasdk.github.io/WasmFiddle/?pkku4

  28. @deepu105 #devoxxUkraine Subprocess using web workers • Async API •

    Uses web workers • One V8 instance per worker
  29. @deepu105 #devoxxUkraine Options

  30. Why is Deno better than NodeJS

  31. @deepu105 #devoxxUkraine Advantages • Easy to install - Single lightweight

    binary • Secure by default, Fine grained privileges • Simpler module resolution • Decentralized and globally cached third party modules • No dependency on package managers or package registries(No NPM, No Yarn, No node_modules) • Native TypeScript support • Follows web standards and modern language features • Remote script runner • Built in tooling
  32. Why does it matter

  33. @deepu105 #devoxxUkraine Why does it matter • Dynamic languages are

    still important ◦ Data science ◦ Scripting ◦ Tooling ◦ CLI • NodeJS ecosystem has become too heavy and bloated • Many Python/NodeJS use cases can be replaced with TypeScript using Deno ◦ TypeScript provides better developer experience ◦ Consistent and documentable API ◦ Easier to build and distribute ◦ Does not download the internet all the time ◦ More secure
  34. @deepu105 #devoxxUkraine Challenges • Fragmentation ◦ Not compatible with most

    of the NPM modules ◦ Lib authors would have to publish a Deno compatible build(Not difficult but en extra step) • Migrating existing NodeJS apps will not be easy due to incompatible API • Bundles are not optimized so might need tooling or improvements there • Stability as Deno is quite new (NodeJS is battle tested) • Not production ready
  35. @deepu105 #devoxxUkraine A Deno proxy application in action $ deno

    install my-proxy deno_app.ts --allow-net $ my-proxy https://google.com
  36. Still in active development

  37. 1.0 planned for end of year https://github.com/denoland/deno/issues/2473

  38. 10 Things I Regret About Node.js - Ryan Dahl -

    https://www.youtube.com/watch?v=M3BM9TB-8yA Deno, a new way to JavaScript - Ryan Dahl - https://www.youtube.com/watch?v=z6JRlx5NC9E Website - https://deno.land/
  39. https://jhipster.tech @java_hipster Full Stack Development with JHipster • Amazon: https://goo.gl/k1NBAv

    • Packt: https://goo.gl/XvQLeN
  40. Thank you! Please rate the talk if you liked it!