Deno 初探

前言

Deno 已经被前端圈子提及有很长一段时间了,上个月 Deno 发布了 1.0 版本,又掀起了一小股 Deno 热。Deno 到底是什么?它可以用来做什么呢?它好用吗?带着一直以来的好奇心,趁着周末的时间,认真地接触了一次 Deno。

一、什么是Deno?

Deno 是一个更安全的 JavaScript 和 TypeScript 运行时,作者 Ryan Dahl 同时也是 Node.js 的创建者。

什么是运行时?

运行时是一个运行环境,也叫运行平台,开发者可以使用指定的语言,基于这个环境开发应用。可以认为运行时就是一个舞台,能做什么事情,取决于舞台能提供什么道具。比如浏览器就是一个运行时,我们可以在浏览器上通过 JS 调用浏览器提供的 API 操作 DOM。

Deno 的作用

Deno 的作用,是让开发者可以使用 JavaScript 语言开发后端服务。

二、为什么会有Deno?

我们知道 Node.js 也是一个让开发者可以使用 JavaScript 语言开发后端服务的 JavaScript 运行时。那既然已经有一个 Node.js,而且已经非常成功,为什么还要造另一个 JavaScript 运行时 Deno ?

两年前(2018年6月),Ryan Dahl 在德国柏林召开的 JSConf EU 会议上发表了名为 “10 Things I Regret About Node.js” 的演讲,有兴趣可以到这里下载 PPT

在分享中,Ryan 回顾了在他看来当初开发 Node.js 时留下的10大遗憾。但由于Node.js 现在已经广泛应用于各个领域,为了保证兼容性,对 Node.js 底层进行大规模改造已经不现实。会上,Ryan 宣布了他决定开发一个全新的 JavaScript Runtime 以解决当初的种种缺陷,这个项目就是 Deno。

Deno 的命名很有意思,就是把 node(no de) 倒过来 deno(de no),颇有颠覆 Node 的意味。

BTW,上个月(2020年5月15日),Deno 发布了1.0版本。

三、走近 Deno

Deno 的开发语言

相比 Node.js 使用 C++ 开发,Deno 起初使用的开发语言是 GoLang,后来改为了 Rust。并且随后把 C++ 写的 libdeno 换成了 Rust 编写的 V8 绑定:denoland/rusty_8。

Deno 目前是建立在 V8 引擎、Rust 、Tokio、TypeScript 的基础之上。

  • V8 是 chrome 浏览器内的 JavaScript 运行时。

  • Rust 是一门系统编程语言,专注于安全,尤其是并发安全。它的性能和标准C++ 不相上下。

  • Tokio 是一个给 Rust 语言使用的异步运行时,提供 event loop 和具体的 I/O 类型。

  • TypeScript 是 JavaScript 的超集。

Deno 的特性

  • 默认支持 ES Modules

  • 默认支持 TypeScript

  • 尽可能兼容 Web 标准 APIs

  • 默认采用沙箱模式运行代码,更安全

  • 去中心化第三方模块机制

  • 提供标准库

与 Node.js 的比较

  • 使用 ES 模块,不支持 require()

  • Deno 不使用 package.json

  • Deno 不使用 npm

  • Deno 中的所有异步操作返回 promise,因此 Deno 提供与 Node 不同的 API

  • Deno 需要显示指定文件、网络和环境权限

  • 第三方模块通过 URL 或者文件路径导入

  • 当未捕获的错误发生时,Deno 总是会异常退出

  • 兼容 Web 的运行时 APIs,更利于前后端的代码同构。

四、如何使用 Deno

Deno 能够在 macOS、Linux 和 Windows 上运行。Deno 是一个单独的可执行文件,它没有额外的依赖。

1.安装

在 macOS 下可以通过Shell命令安装:

curl -fsSL https://deno.land/x/install/install.sh | sh

这个方式在国内安装会很慢,慢到下不下来。。。so,不推荐。

也可以通过HomeBrew 安装:

brew install deno

这个方式可以安装下来,但是,安装的版本是 v0.20.0,很低的版本:

并且这个版本不带 upgrade 命令,升级 deno 的时候很不方便。so,也不推荐。

安利通过国内加速器(镜像源 https://x.deno.js.cn )来安装:

curl -fsSL https://x.deno.js.cn/install.sh | sh

也可以指定版本:

curl -fsSL https://x.deno.js.cn/install.sh | sh -s v1.0.0

首次安装,可以看到提示,需要手动配置一下环境变量,配置语句也已经给出:

$ touch ~/.bash_profile # 创建用户环境变量文件
$ vim ~/.bash_profile # 打开文件,将刚才命令行提示给出的配置语句粘贴进去,保存退出。

让配置立即生效:

$ source ~/.bash_profile

环境变量就设置好了,现在在任何一个新打开的命令行里面都可以使用 deno 命令了。

注意:如果之前使用 brew 安装过低版本的 deno,请使用 brew uninstall deno 卸载 deno 之后,再使用加速器安装高版本,不卸载直接安装高版本不会生效。(别问我为什么知道。。。都是泪。

其他操作系统环境的安装可参考 https://github.com/denoland/deno_install。

如果要升级本地的 Deno,可以运行

deno upgrade

还可以安装指定的版本:

deno upgrade --version 1.1.0

这个命令会从 github.com/denoland/deno/releases 获取最新的发布版本(一个可执行的二进制文件 zip 压缩包),然后解压并替换现有的版本。而 github release 的文件使用的是 aws,在国内访问不稳定。

So,升级也推荐使用国内加速器安装指定版本来达到目的。

2.测试安装

deno --version

如果打印出 Deno 版本,说明安装成功。

到这里,我们就安装好 Deno ,并且可以基于 Deno 进行开发了。

3.运行一个远程的项目

跑一个远程项目(官方的demo)

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

可以看到在控制台输出"Welcome to Deno

(0)

相关推荐

  • Node.js之父成立Deno公司,Deno是否会商业化?

    局长 OSC开源社区 出品 | OSCHINA 文 | 局长 Deno & Node.js 作者 Ryan Dahl 和联合创始人 Bert Belder 宣布成立了 Deno 公司. Rya ...

  • Deno 1.0 发布了,它用 Rust 写就

    官网:https://deno.land/ 作为开发发 Node.js 的大神程序员 Ryan,最近又推出了一个新的框架叫做 Deno,它的名字简写自 Destroy Node.从名字上就可以看出来, ...

  • JetBrains WebStorm 2021 for Mac(多功能集成开发)v2021.2.1无限试用版

    JetBrains WebStorm 2021 for Mac是一款知名的前端开发工具,提供JavaScript和编译到JavaScript语言,Node.js,HTML和CSS的智能编码辅助.Web ...

  • 2020 Github前端最受欢迎项目盘点

    一年一度的Github前端最受欢迎项目排行榜新鲜出炉啦! bestofjs网站通过比较过去12个月在Github上添加的星数,获取了下面的排行榜.下面就和小渡一起来看看,在过去的2020年究竟有哪些深 ...

  • 被创造者嫌弃,Node.js 如何应对来自 Deno 的挑战

    4天前 JavaScript 运行时 Node.js 于日前更新到了 15 版本,该软件自发布至今已走过了 11 年的岁月.但在今年 5  月,其竞争对手 Deno 也发布了 1.0 版本.Deno ...

  • 【精品博文】树莓派安装最新的nodejs

    简单的说Node.js就是运行在服务端的JavaScript.Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台.Node.js是一个事件驱动I/O服务端JavaScr ...

  • Node.js安装教程

    软件 下载 [名称]:Node.js [大小]:26.4 MB [语言]:简体中文 [安装环境]:Win7/Win8/Win10 [Node.js15.11.0下载链接]: https://wwa.l ...

  • 我对前端技术更新的看法以及未来发展趋势预测

    前端开发如何看待"别更新了,学不动了"?Deno.TypeScript 等新轮子层出不穷,未来前端重点方向在哪?前端开发在大前端浪潮下如何持续学习.成长? SpriteJS 3.0 ...

  • 中华文化习养“国学书法”初探

    / 国学,一国之学,华夏之根,民族之魂. 书法,中华国粹,文化精华,审美代表. 我们尝试将国学核心精神与国粹书法紧密结合,以传承先贤之优良传统,不负先贤良苦用心及"丰功伟业". 前 ...

  • 黄霖:《新刻绣像批评金瓶梅》评点初探

    目前,国内外越来越多的学者正在注意发掘我国古代小说理论和从事<金瓶梅>的研究,但对于明末无名氏评点的<新刻绣像批评金瓶梅>却似乎没有引起重视. 其实,它的评点较有见地地阐发了& ...

  • 初探人得病与治病的机理一一心理篇(即心理与水篇)

    我们要认知我们相信的东西,信念,对组成我们身体的所有细胞.内脏.及其系统的水分结构有着直接影响.江本博士通过把水传递的信息,拍摄成肉眼看得到的水结晶照片,已经证实了这一点. 我们的每一个起心动念都会影 ...

  • 【史迹攻略】红绿军伍套牌初探

    昨天禁牌表刚刚更新,虽然表面上看起来对于史迹的影响并不是特别大,不过火树族密使的解禁应该还是会对史迹环境造成不小的冲击 在这次禁牌表更新之前,史迹的快攻和 beat down 类套牌几乎已经绝迹.由于 ...

  • 冥途求生记 · 第一回:云中初探

    冥途求生记 &#183; 第一回:云中初探

  • N字战法初探

    最近有看复盘的朋友一定会发现模式总结里的N字战法每天都会有很多的标的出现,之前分享的牛股系列中其实也多次运用到了N字战法的介入例如:奥园美谷(牛股分析3),宁波海运(牛股分析4). N字战法是一种非常 ...

  • 陇东地区仰韶文化酿酒之法初探——以秦安大地湾遗址为例

    中国考古 中国社科院考古研究所1小时前 摘要:以陶器残留物分析为基础,相关研究已在多个仰韶文化遗址中发现了酿酒的证据.为了解仰韶文化酿酒活动的普遍性与酿酒方法的多样性,本文将研究的地域范围拓展至陇东地 ...

  • 基于高考评价体系的作文命题路径初探

    教育部2016年9月发布的<中国学生发展核心素养>指出"学生发展核心素养"即"学生应具备的.能够适应终身发展和社会发展需要的必备品格和关键能力",并 ...

  • 索引扫描时,对同一个叶子块访问多次的原因初探

    在观察索引扫描会按何种次序进行索引块的访问时,我发现了一种现象,即会有部分叶子块被访问两次或更多.以下是我自己对这种现象的重现,以及对产生该现象原因的初步判断.但截至目前,我并未找到有官方文档对相关内 ...