百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

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

bigegpt 2025-02-20 14:33 8 浏览

全文共2180字,预计学习时长8分钟


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


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


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


从头说起


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


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


还有什么新鲜的吗?


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


安全集成


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


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


deno --allow-read=/etcmyscript.ts


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


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


一个更完整的标准库


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



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


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


集成版TypeScript


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


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


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


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


不再需要NPM和node_modules文件夹


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


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


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


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


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



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


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


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


还有别的吗?


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不断改进升级,以满足业界需求。


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



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


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


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


留言点赞关注

我们一起分享AI学习与发展的干货

如转载,请后台留言,遵守转载规范

相关推荐

Linux 系统启动完整流程

一、启动系统流程简介如上图,简述系统启动的大概流程:1:硬件引导UEFi或BIOS初始化,运行POST开机自检2:grub2引导阶段系统固件会从MBR中读取启动加载器,然后将控制权交给启动加载器GRU...

超专业解析!10分钟带你搞懂Linux中直接I/O原理

我们先看一张图:这张图大体上描述了Linux系统上,应用程序对磁盘上的文件进行读写时,从上到下经历了哪些事情。这篇文章就以这张图为基础,介绍Linux在I/O上做了哪些事情。文件系统什么是...

linux入门系列12--磁盘管理之分区、格式化与挂载

前面系列文章讲解了VI编辑器、常用命令、防火墙及网络服务管理,本篇将讲解磁盘管理相关知识。本文将会介绍大量的Linux命令,其中有一部分在“linux入门系列5--新手必会的linux命令”一文中已经...

Linux环境下如何设置多个交叉编译工具链?

常见的Linux操作系统都可以通过包管理器安装交叉编译工具链,比如Ubuntu环境下使用如下命令安装gcc交叉编译器:sudoapt-getinstallgcc-arm-linux-gnueab...

可算是有文章,把Linux零拷贝技术讲透彻了

阅读本文大概需要6.0分钟。作者:卡巴拉的树链接:https://dwz.cn/BaQWWtmh本文探讨Linux中主要的几种零拷贝技术以及零拷贝技术适用的场景。为了迅速建立起零拷贝的概念...

linux软链接的创建、删除和更新

大家都知道,有的时候,我们为了省下空间,都会使用链接的方式来进行引用操作。同样的,在系统级别也有。在Windows系列中,我们称其为快捷方式,在Linux中我们称其为链接(基本上都差不多了,其中可能...

Linux 中最容易被黑客动手脚的关键目录

在Linux系统中,黑客攻击后常会针对关键目录和文件进行修改以实现持久化、提权或隐藏恶意活动。本文介绍下黑客最常修改的目录及其手法。一、/etc目录关键文件有:/etc/passwd和/et...

linux之间传文件命令之Rsync傻瓜式教程

1.前言linux之间传文件命令用什么命令?本文介绍一种最常用,也是功能强大的文件同步和传输工具Rsync,本文提供详细傻瓜式教程。在本教程中,我们将通过实际使用案例和最常见的rsync选项的详细说...

Linux下删除目录符号链接的方法

技术背景在Linux系统中,符号链接(symlink)是一种特殊的文件,它指向另一个文件或目录。有时候,我们可能需要删除符号链接,但保留其指向的目标目录。然而,在删除符号链接时可能会遇到一些问题,例如...

阿里云国际站注册教程:aa云服务器怎么远程链接?

在全球化的今天,互联网带给我们无以计数的便利,而云服务器则是其中的重要基础设施之一。这篇文章将围绕阿里云国际站注册、aa云服务器如何远程链接,以及服务器安全防护如Ddos防火墙、网站应用防护waf防火...

Linux 5.16 网络子系统大范围升级 多个新适配器驱动加入

Linux在数据中心中占主导地位,因此每个内核升级周期的网络子系统变化仍然相当活跃。Linux5.16也不例外,周一最新与网络相关的更新加入了大量的驱动和新规范的支持。一个较新硬件的驱动是Realt...

搭建局域网文件共享服务(Samba),手机电脑都能看喜欢的影视剧

作为一名影视爱好者,为了方便地观看自己喜欢的影视作品,在家里搞一个专门用来存放电影的服务器是有必要的。蚁哥选则用一台Ubuntu系统的电脑做为服务器,共享影音文件,其他同一个局域网内的电脑或手机可以...

分享一个实用脚本—centos7系统巡检

概述这周闲得慌,就根据需求写了差不多20个脚本(部分是之前分享过的做了一些改进),今天主要分享一个给平时运维人员用的centos7系统巡检的脚本,或者排查问题检查系统情况也可以用..实用脚本#!/bi...

Linux 中创建符号链接的方法

技术背景在Linux系统里,符号链接(SymbolicLink),也被叫做软链接(SoftLink),是一种特殊的文件,它指向另一个文件或者目录。符号链接为文件和目录的管理带来了极大的便利,比...

一文掌握 Linux 符号链接

符号链接(SymbolicLink),通常被称为“软链接”,是Linux文件系统中一种强大而灵活的工具。它允许用户创建指向文件或目录的“快捷方式”,不仅简化了文件管理,还在系统配置、软件开发和日...