全文共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就已经改进了它的标准库,但是与其他语言相比,它还有很多不足。

图源:unsplash

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上指定包版本。虽然不是很方便,但行得通。

图源:unsplash

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

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

图源:unsplash

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

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

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

留言点赞关注

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

编译组:吴子珺、周果

相关链接:https://blog.bitsrc.io/what-is-deno-and-will-it-replace-nodejs-a13aa1734a74

如转载,请私信小芯,遵守转载规范

nodejs升级命令_又一阵后浪:横空出世的Deno会取代NodeJS吗?相关推荐

  1. kali linux 升级命令_作为高级Java,你应该了解的Linux知识

    原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处. 作为一个javaer,我以前写过很多关于Linux的文章.但经过多年的观察,发现其实对于大部分人,有些东西压根就用不着.用 ...

  2. antd 3升级命令_是时候拥有一个你自己的命令行工具了

    本篇博客主要介绍了如何使用commander, inquirer以及chalk从零开始,创建属于自己的命令行工具. 0. 一分钟体验 首先我们先花一分钟的时间,体验一下创建自己的命令行cli工具是什么 ...

  3. 对学校的希望和寄语_南中医举行2020年开学典礼,校长胡刚寄语“后浪”:乘风破浪,扬帆起航...

    现代快报讯(通讯员 刘丹青 记者 仲茜)"钟山脚下.扬子江畔,杏林学子济济一堂.青春风华.意气轩昂,满园桃李竟芬芳."9月17日,南京中医药大学举行2020级新生开学典礼.为了让每 ...

  4. 查看宝塔面板账号密码命令_宝塔面板升级到最新版图文教程

    往期教程: 宝塔面板教程(1)基于云服务器搭建宝塔面板教程最全详解 宝塔面板教程(2)宝塔面板添加WordPress站点详细图文教程 宝塔面板教程(3)基于宝塔面板成功配置网站SSL安全证书 宝塔面板 ...

  5. .net mysql 更新_升级 MySql.Data for NET 后遇到的神坑

    今天把一个之前基于 http://ASP.NET MVC 5 + EntityFramework 5 的项目里的 Nuget 包都升级了一下,包括将 EF 从 6.1.3 升级到 6.2.0,将 My ...

  6. python与会计的论文_甭管前浪后浪,写完论文的先浪!

    原标题:甭管前浪后浪,写完论文的先浪! 自愿返校已是板上钉钉的事儿了 而对于大家的期末考 现在也基本上已经通知线上考试 如果没有线上考试的话,那就是交论文 可是,论文动不动就2000字10%查重 毛概 ...

  7. nodejs初学者书籍_表示nodejs的后继者

    nodejs初学者书籍 If you observe carefully, DENO is an anagram of the word NODE. But probably much more th ...

  8. 昊鼎王五:Windows运行中的所有命令_Windows快捷命令_运行中的所有命令

    昊鼎王五:Windows运行中的所有命令_Windows快捷命令_"运行"中的所有命令 winver 检查Windows版本 wmimgmt.msc 打开Windows管理体系结构 ...

  9. nodejs升级引起的构建错误:0308010C:digital envelope routines::unsupported

    文章目录 查找原因 webpack源码与配置 查看nodejs的crypto模块 查看openssl问题 解决方法 升级webpack 提供legacy容器环境 增加系统环境变量 在package.j ...

  10. 后浪优秀!21 岁小伙兼职程序员养家,大三存款达 6 位数

    整理 | 王晓曼 出品 | 程序人生 (ID:coder _life) 4月22日,话题#小伙怒学编程大三存款六位数#冲上微博热搜.江苏常州,21岁的小伙臧家河靠编程实现了人生"逆袭&quo ...

最新文章

  1. 银行卡大小的充电宝,买就送耳机!
  2. oracle与db2的应用场景区别,db2和oracle语句区别
  3. 解决vscode格式化vue文件出现的问题
  4. c 结构体在声明时赋值_Java基础知识 初识Java 循环结构进阶 数组 数据类型 各种运算符...
  5. php值比较大小,PHP_PHP浮点比较大小的方法,本文实例讲述了PHP浮点比较大 - phpStudy...
  6. kotlin-unresolved reference daclaredFunctions
  7. java面试题33 Math.round(11.5) 等于多少 (). Math.round(-11.5) 等于多少 ( ).
  8. JS【知识点】------(转)
  9. 4月27日--28日课堂内容
  10. 详解 EnumWindows 与 EnumWindowsProc - 回复 SplendourChiang 的问题
  11. SQL Server Profiler概述
  12. selenium定位不到元素的原因。
  13. 网络驱动器映射成功但无法更新文件_FTP映射网络驱动器-ExpanDrive for mac
  14. matplotlib 2.2.4 has requirement python-dateutil=2.1, but you'll have python-dateutil 1.5
  15. 有无3C认证的电源价格差别说明什么?
  16. win32学习之 --------GDI使用 代码记录
  17. 推荐x61使用nhc软件控制风扇
  18. CMDN创新应用推荐:好大夫在线
  19. 第三代oid铺码软件_你好点读笔!自制小达人点读目录册之书名贴铺码
  20. LabWindows图表显示

热门文章

  1. 一分钟了解阿里云产品:绿网
  2. 使用安全json parser防止json注入
  3. 【狂神说Redis】1NoSQL概述1-2什么是NoSQL
  4. UDP网络编程核心类
  5. centos mysql源_CentOS 使用国内源安装 MySQL
  6. python大牛是什么水平_yield--Python大牛必须掌握的高端语法
  7. Annotation-specified bean name ‘mapper‘ for bean class [com.thoughtworks.xstream.mapper.Mapper] conf
  8. mybatis源码分析(1)-----sqlSessionFactory创建
  9. 心仪数据拨号服务器无响应,宽带拨号服务器未响应
  10. mysql中整理设置__MySQL的常用操作命令整理