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

开发 前端
Node.js听起来很熟悉吧?这是否意味着Deno实际上已经自动取代了Node而我们该开始计划重构冲刺呢?现在下结论显然为时尚早,但以下几个事实可能在很大程度上决定了Deno的发布。

本文转载自公众号“读芯术”(ID:AI_Discovery)

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

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

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

[[328399]]

一、从头说起

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

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

二、还有什么新鲜的吗?

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

1. 安全集成

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

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

  1. deno --allow-read=/etcmyscript.ts 

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

如果你是Android用户,你一定已经收到了很多应用程序的要求,允许它们访问你手机中的不同系统(如联系人、电话、文件夹等)。这里也一样。通过在执行脚本的命令行中使用这些标志,可以提供代码所需的权限。

2. 一个更完整的标准库

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

[[328400]]

图源:unsplash

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

从本质上讲,Deno开箱即用,它的自带工具可以为终端文本添加颜色、处理外部数据结构(如二进制、csv、yaml和其他数据结构)、生成UUID,甚至编写websockets。还有其他可用的更基本模块,比如文件系统访问、日期帮助器函数、与http相关的函数等等。

3. 集成版TypeScript

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

尽管默认情况下Deno会做很多工作,但你可以使用自己的tsconfig.json文件覆盖配置:

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

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

4. 不再需要NPM和node_modules文件夹

这是个大问题。会不会太臃肿了?这种分散依赖关系的方式是错误的吗?这自然是Node最具争议的一大方面,Deno决定完全摆脱它。

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

  1. import * as log from"https://deno.land/std/log/mod.ts"; 

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

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

[[328401]]

图源:unsplash

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

  1. export { assert } from"https://deno.land/std@v0.39.0/testing/asserts.ts"; 
  2. export { green, bold } from"https://deno.land/std@v0.39.0/fmt/colors.ts"; 

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

5. 还有别的吗?

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

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

三、Deno会很快取代Node.js吗?

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

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

它是完美的吗?当然不是。和生活中的其他事情一样,在编程语言方面也很难做到十全十美。

[[328402]]

图源:unsplash

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

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

它会取代Node吗?谁知道呢,一起拭目以待吧!

 

责任编辑:赵宁宁 来源: 读芯术
相关推荐

2010-03-25 10:04:10

UbuntuOne M

2018-11-29 10:49:36

2021-12-17 07:00:56

ESMongoDBRedisJson

2010-12-09 09:09:37

2016-10-08 23:30:58

Power8云计算

2013-11-01 09:07:15

2022-05-12 15:25:16

恶意软件网络攻击

2022-07-01 07:30:58

Data Fabri数据经纬

2023-02-21 21:48:29

2023-07-27 16:53:10

2009-05-07 18:50:35

四核Nehalem服务器

2014-01-17 14:08:45

移动os国产软件

2016-04-27 11:01:11

SparkStormApache Apex

2023-04-19 07:34:21

AutoGPT程序员GitHub

2011-05-04 15:09:56

激光打印机奔图科技

2020-10-28 11:54:05

AI 数据人工智能

2020-10-12 14:47:25

芯片半导体技术

2014-11-13 16:37:50

2015-06-19 09:21:52

JointForce解放号

2024-02-22 08:37:28

NodejsJavaScript运行
点赞
收藏

51CTO技术栈公众号