认识Deno — 2020年最受瞩目的JS项目
2021-03-09
Coding
Javascript
Typescript
Deno
Node
👋 ‍️‍️阅读
❤️ 喜欢
💬 评论

认识Deno — 2020年最受瞩目的JS项目

2020年刚刚过去不久,对于现实世界来说是特殊的一年,对于Javascript世界也是特殊的一年。 在Github Javascript排行榜上,Deno一举击败了蝉联5年冠军的Vue.js ,以30.2kstar荣登榜首。 如果你不太关注前沿消息,你一定会问,这个雨点里的小恐龙是什么来头?

What's Deno

简单的说,Deno(蒂诺)是一个Javascript运行时。

这是你要问了,JS运行时,我们不是有Node了么? 是的,Deno就是Node的——翻转, no-de => de-no。

不止如此,Deno和Node还有同一个父亲,Ryan Dahl (ry@github)。 虽然ry已经9年没有维护Node了,但是他仍是Node的Top 1贡献者。 既然如此,ry又为何要回来搞什么Deno呢?

Why Node is not enough

Node于2009年首次发行,距今已经12年了,距Deno首次发行的2018也有9年时间。 在这些年里Javascript生态发展迅速,尤其是

  • ES Modules
  • Typescript
  • Promise API (await/async)

这些新技术对于始于2009年的Node来说都是巨大的包袱,直进Node对他们的支持都不甚理想,需要额外的插件配置(例如Babel)。

另外,Node的包管理工具NPM也一直为人所诟病

  • 冗杂的node_modules目录,小文件数量惊人
  • 不安全的三方代码,无法限制权限
  • 中心化管理 (经典案例)

这些问题都将在Deno里得以解决

What's Deno again

Deno是一个极简的安全的现代化的Javascript/TypeScript运行时

  • 只有且永远只有一个可执行文件
  • 默认的安全环境,需要显式声明权限(如文件,网络)
  • 开箱即用的Typescript
  • 基于URL的模块管理
  • 内置常用工具(如bundle, fmt)
  • 交叉编译原生可执行程序

Deno主要构建于

  • V8
  • Rust
  • Tokio (event lop)
  • TypeScript

之所以不像Node一样用C++,作者的原话是:

In C++ you have to write everything yourself

... or spend 80% of your time maintaining the build system

Have a Try

介绍了这么多,让我们上手试一试Deno,到底好不好用

Installtion

Deno的安装只需要一行命令,他会下载一个单独的deno.exe到你的~/.deno/bin并添加到PATH

现在试一试deno --version来验证安装成功

Hello World

直接用run命令就可以运行来自任何本地或者网络上的文件

deno run https://deno.land/std/examples/welcome.ts

cat

Deno可以把脚本打包成可执行文件安装到本地,我们可以实现一个简单的cat命令。 这里可以看到--allow-read,如果不加这个flag将会报错。

deno install --allow-read -n deno_cat https://deno.land/std/examples/cat.ts
deno_cat file.txt

chat

Deno实现的简单聊天工具,运行后打开http://localhost:8080/

deno run --allow-net --allow-read https://deno.land/std/examples/chat/server.ts

react

我自己开发的工具包,快速搭建一个Deno的react项目

deno install -A --unstable -n deno-create-react-app https://deno.land/x/create_react_app/mod.ts
deno-create-react-app init my-app
cd my-app
deno-create-react-app run

我为什么喜欢Deno

相比于Deno强调的Secure,我对于Deno最大的喜爱就是一个点,简单

安装简单

  • 一键安装
  • 只有一个可执行文件import url
  • 不需要配置环境
  • 不需要配置文件

这就是我理想中应用程序的样子,约定优于配置,封装所有不必要的细节。

开发简单

  • 没有node_modules,这点非常重要
  • URL Import,虽然多数时候依赖项会选deno.land,但是不妨碍随时切换到其他源(如github)
  • Typescript支持,typescript的类型系统是我用过最为强大的,node编译/运行ts都必须要装插件
  • 异步友好,这一点是Javascript的主要优势

部署简单

  • 一键运行来自网络任何地方的程序
  • 打包为单个可执行文件

Deno的局限性

  • Deno不兼容npm生态,自己的生态仍在发展中(即使可以利于诸如jspm的工具导入npm模块,兼容性仍是问题)
  • 性能略低于Node (严格来说,如果你考虑性能的话Node也不是一个好选择,应该切换到其他语言)

结语

2020年5月,Deno发布了1.0版本。时至今日,Deno-v1.8已经发布了。 但是我们还是要记住,它还只是一只3岁的小恐龙,还有很多不成熟的地方。 如果你正在评估是否使用Deno,以下建议可供参考

  • 对于已经平稳运行的项目,不建议切换到Deno,Deno仍处在早期采用者阶段
  • 而对于尚在初期的项目,如果你想使用Javascript/Typescript,Deno会是一个不坏的选择
  • 对于个人开发,Deno是一个快速且有趣的开始
  • 对于serverless应用,Deno已经逐步开始流行

虽然我很喜欢Deno的设计,但是也必须承认,它无法取代Node,至少从现在看来。

但是同时我们又可以看到,Github上Node仓库里已经有50+和Deno相关的Issue,例如 HTTP Imports 这一重要特性。 而且Deno的Star数量也已经直逼Node。 Deno的存在也给了Node巨大的前进动力。 即使Deno最终没能取代Node,我们也可以得到更好的Node,不是吗?

Reference

其他阅读


Copyright © 2020-2022 Dean Xu. All Rights reserved.