又一阵后浪:横空出世的Deno会取代NodeJS吗?

云栖号资讯:【点击查看更多行业资讯】
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!

又一阵后浪:横空出世的Deno会取代NodeJS吗?

Deno 1.0.0版本于近期发布了,它是由Ryan Dahl发明的,他还因发明Node.js这个“小玩意儿”而闻名。

Node.js听起来很熟悉吧?这是否意S l Y J / ^ ] V味着Deno实际上已经自动取代了Node而我们该开始计划重构冲刺呢?e = V

现在下结论显然为时尚e C 7 u 9 k E早,但以下几个事实可能在很大程度上决定了Deno的发布。

从头说起

2018年,Ryan在一次演讲中谈到了他认为Node存在的10大问题。演讲的最后,他展示了他当时正在构建的、还只是一个小系统的Deno,也就是大家口中的Node.js 2.0版本,他对原有j R ?版本做了改进,也更加安全

两年后,Deno 1.0正式发布。其后端有一个全新的JavaScript运行环境,但/ 3 = g E w它是用T p NRust编写的,而不是用C++。它以Tokio平台为基础(该平台为JavaScript提供其所需要的异步运行环境),仍可运行Google V8引擎。

还有什么新鲜的吗?

我们不仅仅是在讨论一个和现有的Node.js完全兼容的新的JavaScript运行环境,Ryan还& 7 e利用了这个机会,在Deno中加入了一些他认为n , 1 ; ! b { 3在早期创作中缺失的东西。

安全集成

默认设置中,Node.js允许用户访问所有内容,这意味着你可以读写文件系统# a v F | Y 5 l、发出请求、访问环境变量/ n E r L等等。尽管作为开发人员,拥有这种访问权限是有利的,但如果在编写自己的代码时不够小心,也会带来安全风险。

因此,Deno使用命令行参数来启用或禁用对不同安全特性的访问。+ I K J , ; T如果你需要让你的脚本访问/etc 文件夹,可以输入:

deno --allow-read=/etcmy ^ ~ l [ Gyscript.ts

[ 5 B的代码将从文件夹中读取,你会得到一- z ? b R d个安全异常提示。这类似于其他平台处理安全性的方式。

如果你是Android用户,你一定u h X 8 z i已经收到了很X z Y ~ [ a ] J应用程序的要求,允g 6 X许它们访问你手机中的不同系统(如联系人、电话、文件夹等)。这里也一样。通过在执行脚本的命令行中使用这9 / N ~ _ F E Q l些标志,可以提供代码所需的权限。

一个更完整的标准库

自Nod& V Z ue的第一个版本开始,JavaScript就已经改进了0 : !它的标准库,但是与其他语言相比,它还有很多不足。

又一阵后浪:横空出世的Deno会取代NodeJS吗?

Deno也试图改进这一点,据说它会拥有一个非常完整的标准库,能让开发人员使用官方工具来执行基本任务,且只需使用外部: i ?库(alaNPM)来完成复杂的任务。

从本质上讲,Deno开箱即用,它的自带工具可+ y c ( *以为终端文本添加颜色、处理外部数据结构(如二进制、csv、yaml和其他数据结构? E 9 V S)、X K i $ w生成UUID,甚j ` G Y Q - H B =至编写websockets。还有其他可用的更基本模1 7 6 k 8块,比如文件系V & 6 K ~ n ~ F统访问、日期帮助器函数、与http相关的函数等等。

集成版TypeScript

如果你是TypeScript的忠实用户,那H U U ^ ! $么不需要o , M h _ 外部工具,Deno就会帮你搞定很多工作,默认情况下JavaScript的转换在内部即可完成,这一点无需担心。

尽管默认情况^ 3 ; O z 下Deno会做很多工作,但你可以使用自己的tsconfig.json文件r a ( _ v 覆盖配置:

deno run -c tsconfig.json[your-script.ts]

默认模式是使用严格模式,因此,进行任何欠考虑的编码操作都会立即收到警告。

不再需要NPM和node_modules文件夹

这是个n @ J Z } 0大问题。会不会太臃肿了?这种分散依赖关系的方式是错y # ^ W Z j R $误的吗?这自然是Node最具争议的一大方面,Deno决O F M ,定完全摆脱它。

那Deno是如何处理依赖项的呢?目前的方法是,允3 * H 8 ,许你从任何地方索取模块。换言之,你可以这样做:

im% ] Q U 2 L f T !port *$ * e ~ g # as log from"https://deno.landp j 2 D ] Z/st{ u ^ y 8 d G 9 gd/log/mod.ts";

你无需拥有自R - ] F X己的集中存储库,但必须谨慎操作,因为从无法控制的第三方源导入模块会让你处于开放暴露的状态。

事实上,我们的好朋友packas ? ` 0 Age.json也不见了。现在通过在名为deps.ts的文件中列出一系列模块及其各自的URL,来简化依赖性管理。你肯定会问,版本0 y h ) q y / # d控制呢?你可以在URL上指定包版本。虽然不是很方便,但行得通。

又一阵后浪:横空出世的Deno会取代NodeJS吗?

一个正常的deps.ts文件是这样的:

export { assert } from"https://deno.land/sf I m @ = y vtd@v0.39.0/B , Otesting/asserts.ts";
export { green, bold } from"https:A P $ ! 7 G 7 ://deno.land/std@v0.39.0/fmt/colors.ts";

这将重新导出模块。如果你想更U _ P Q改模块的版本,需对URL进行相应的简化修改。在第一次执行脚本时,导入的代码会被缓存,直到再次使用--reload 标志运行为止。

还有别的吗?q M q o v ] g Q

Deno还有其他特点,比如它拥有了更多的“开箱即用”工具,包括测试运行器、调试器t : y g 4 4 {、文件监视程序等。但话说回来,其中一6 t } ( d 3 g些只是由语言提供的API接口,你需要编写出自己的工具才能使用它们。

以 Deno.watchFs提供的文件监视器API接口为例,如果你正在寻找与nodemon类似的解决方案,那你必须自己完成。下面是解决类似问题的23行脚本:

又一阵后浪:横空出世的Deno会取代NodeJS吗?

Deno会很快取代Node.js吗?

老实说,不一定。有些人自Node.js 0.10版本推出F n 6 $ / T就开始使用Node js,甚至将其应用于生产。我们过去i X ~ e H O ,之所以这样做是因为没有与其类似的系统。

PHP、Python甚至Ruby都无法在后端与JL . c T o 1 7 X 7avaScript和异步I/O模型相提并论,更不用说Java和. NET了。这些年来,Node和JavaScript不断改进升级,以满足业界需求。

它是完美的吗?当然不是。和生活! + ; P中的其他事情一样,在编程语言方面也很难做h } k 8 . b `到十全十美。

又一阵后浪:横空出世的Deno会取代NodeJS吗?

Deno也不例外。目前它还只是一个计划用2年时间达成目标的想法。它还没有在生产系统中试验和测试过,没有被审查过,也没有应用于奇怪的、意想不到的使用情况,我们无法了解它是如何处理这些极端情况的。

也许在一年后,我们会听到公司分享他们有关应用Deno的经验、他们如何解决新发现的缺陷,最终,它背后的群体将使g , V V用Deno; ] $ N $ h | ,让它“物尽其用”。而在此之前,Deno还只是早期使用者的玩具。

它会取代Node吗?谁知道呢,一起拭目以T ! l M : d , y待吧!

【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/live

立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK

原文发布时间:2020-06-01
本文作者:读芯术
本文来自:“读芯术公众号”,了解相关信息可以关注“读芯术”