What is Deno & is it time to move on Deno over Node.js?
Hints Staff
4 years ago
Deno.js is finally released its 1.0.0. release date on May
13th, 2020. In this article will share you some information
about what is Deno & is it time to move on Deno over
Node.js.
Let's first know What Deno is?
1. Deno was created by Ryan Dahl, the creator of Node.js.
2. Deno is secure by default. Without permission, it
cannot access files, network, or the environment.
3. Deno has TypeScript built-in with no external
configuration needed.
4. External packages are pulled in via urls (much like Go)
5. Deno is an anagram for Node and it's pronounced Deeno
(long e).
6. Deno is its minimalistic design associated with its
very efficient referentialy-transparent import-system.
In 2018 Ryan Dahl did a talk at JSConf EU where he talked
about his top 10 regrets with Node.js. His talk was
excellent and you can watch it below.
In his talk, Ryan mentioned he had concerns with the
node_module system and other legacy API's that will never
change. He noted that JavaScript has changed a lot since
Node.js came out and that he could see a way to make a
better version of Node.js. He wanted it to be compatible
with the browser AND the server environment. Security was
also something that he wanted to focus on.
Two years later, the date’s been set: May 13th, that’s when
Deno 1.0 will be officially released. A brand new JavaScript
runtime for the backend, but instead of being written in
C++, it’s written in Rust, based on the Tokio platform
(which provides the asynchronous runtime needed by
JavaScript), still running Google’s V8 engine though.
A lot has happened since Ryan's talk at JSCONF 2018. Many
people have joined the project, it already has 48k stars on
Github, and the project is beginning to raise a lot of
attention in the community prior to its official 1.0.0.
release on May 13th.
Time will only tell whether Deno will continue to grow but
if the initial reaction is anything to go by, it's very
positive.
#Top Syntax Features
1. Top Level Await
No more wrapper async functions. Just use top-level await
syntax
const data = await fetch('api/data');
2. Import and URLs
You can use import and you don't need to NPM install all
your packages. Much like GoLang, you can import from URLs.
import stuff from 'https://package/url'
3. TypeScript Built In
No need to set up TypeScript. It's all built-in. Just start
writing your code!
4. Secure By Default
Deno has restricted access to files, the network, and the
environment. This is a big difference to Node.js which has
access immediately to everything.
5. ES6 and beyond
Unlike Node, Deno has the opportunity to incorporate modern
JavaScript syntax which can remove the callback hell that
Node can lead to.
6. Compatible with the Web
Deno's API is meant to be compatible with the web.
7. Web Assembly
Deno has support for wasm binaries.
There's more planned with Web Assembly so keep an eye on the
project.
#No more NPM or
node_modules folder
This one’s a biggy since everyone and their mother has had
something to say about it in the past. Is it too bloated? Is
it the wrong way to distribute dependencies? It is
definitely one of the most controversial aspects of Node and
Deno decided to get rid of it, altogether.
So how is Deno handling dependencies? So far, by simply
allowing you to require modules from anywhere. In other
words, you can simply do:
import * as log from "https://deno.land/std/log/mod.ts";
No need to have your own centralized repository anymore, but
you do have to be careful with this practice, since
importing modules from 3rd party sources you don’t have
control over, leaves you open and exposed.
In fact, our good pal package.json is also missing,
dependency management is now simplified by having a list of
modules and their respective URLs on a file called deps.ts .
But what about versioning? I hear you ask. Well, you can
specify the package version on the URL, it’s not really
elegant, but it works.
#So, will it replace
Node.js anytime soon?
Not really, to be honest, the title is a bit of a clickbait.
Some of us started using Node.js back in the day when it was
around version 0.10, and we were using it in production! It
was a bit scary to tell you the truth, but we were doing it
because there was nothing like it around. Neither PHP,
Python or even Ruby (let alone Java or .NET) could compare
to having JavaScript and an asynchronous I/O model in the
back-end, all in one. And over all these years, Node (and
JavaScript) has evolved to meet the industry’s requirements.
Is it perfect? Heck no! But like anything else in life,
there is no perfect when it comes to programming languages.
Let's first go through some points which state that there
may be low chance that Deno replace Node.js
1. Forces everyone to use TypeScript
2. Preaches security when that’s not an issue if you know
what code is in your project (which you absolutely should)
3. Still uses the same V8 C++ engine (but with Rust as
middleman
4. Still does not offer any portable builds (requires Deno
installed on the target OS to even run a single line)
5. STILL DOES NOT OFFER PORTABLE BUILDS so you have to
carry around all your dependencies and source code with
you wherever you want to actually run the code.
6. Did a poor job of trying to copy what Go/Golang does
for its import system
7. Has a wide open import system that doesn’t enforce
version control (doesn’t enforce using Git repos like
Go/Golang does)
8. Doesn’t offer much performance improvement from NodeJS
TypeScript (their press release admits their TS
compilation times are slow).
9. Supports about 50% less requests per second via its
HTTP server (though response times per request are much
better)
10. Doesn’t really offer anything new over NodeJS that
your project manager cares about
All that said, if your backend NodeJS project is using
TypeScript, I could see people justifying moving over to
“the new thing”. The problem is, I can’t for the life of me
see what you would gain that a project manager would really
care about.
These days, apps are ran in Docker containers with full
permissions since it’s containerized so security seems like
a dumb thing to preach. If Deno came out with a way to
absorb npm packages without issue, the migration process
would be far less painful but mainly fruitless nonetheless.
Bottom line, I don’t know how you’d pitch your non-technical
manager on the benefits of Deno because it doesn’t offer any
transformative features or benefits. I see it gaining in
popularity, yes. However, I do not see it replacing NodeJS
and npm.
Let's Install Deno into our system & Run Hello World!!