Deno 会取代 Node.js 吗?
Posted CSDN
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Deno 会取代 Node.js 吗?相关的知识,希望对你有一定的参考价值。
【CSDN 编者按】几天前,Node 之父 Ryan Dahl 及 Deno 团队为我们正式带来了 Deno 1.0,据官方介绍,这是一个 javascript/TypeScript 运行时,使用 V8 引擎、Rust 构建。因其是 Node 之父的已经历时两年的新项目,Deno 在业界引起了非常强烈的讨论。本文作者 Fernando Doglio 是在 Node.js 上鼎鼎有名的大神,著作了多本技术图书,包括《Scaling Your Node.js Apps》、《REST API Development with Node.js》、《Reactive Programming with Node.js》等,其中有《Python 性能分析与优化》经图灵引进已在国内上架中文版。在本文中,Fernando 详细分析了 Deno 的众多特性,以及开发者们尤为关注的是否会取代 Node.js 上,CSDN 经 Fernando 授权并发布以飨读者。
以下为译文:
Deno 是什么?它会取代 Node.js 吗?
显然,对这个问题的简单回答就是“现在下结论还为时过早”,但有几个事实可能在你做出这样的决定时发挥重要的作用。
首先,Deno 是由 Ryan Dahl(Node 之父)所创建,他也以创建 Node.js 而闻名于世,听起来很熟悉吗?这是否意味着 Deno 会自动取代 Node?我们都应该开始计划重构 sprint 吗?见鬼,当然不!但是如果你想了解更多,请继续阅读!
我们从头说起
2018 年,Ryan 做了一次演讲,他谈到了他认为 Node.js 的十大错误之处。在演讲的最后,他公布了 Deno 项目,当时它还只是一个小项目,Ryan 将在这个项目中构建一个称为 Node.js v2 的东西,它将对 Node.js 作些改进,并且使其更加安全。
下面是 Ryan 当时演讲的视频(请自备梯子访问):
https://youtu.be/M3BM9TB-8yA
两年后,这个项目的发布日期终于确定在 2020 年 5 月 13 日,也就是 Deno 1.0 正式发布的日子。Deno 是一个在服务端运行的、全新的 JavaScript 运行时,但是它是用 Rust,而不是用 C++编写的。它基于 Tokio 平台(它提供 JavaScript 所需的异步运行时),并且仍然运行谷歌的 V8 引擎。
除此以外,Deno 都有什么新特性?
Deno 将不再是一个与当前 Node.js 完全兼容的新的 JavaScript 运行时。相反,Ryan 利用这个机会将一些他认为在 Node.js 的早期创建中缺失的一些特性放入到了 Deno 中。
集成的安全性
默认情况下,Node.js 允许你访问所有内容。也就是说,你可以读写文件系统、发出请求、访问环境变量等等。虽然作为一个开发人员,拥有这种访问权限是一个好处,但如果在编写自己的代码时不小心,也会带来安全风险。
而 Deno 则不同,它使用命令行参数来启用或禁用对于一个访问不同的安全特性。比如说,如果你需要对脚本启用访问/etc 文件夹的权限,你可以执行以下操作:
deno --allow-read=/etc myscript.ts
更完整的标准库
自从 Node.js 的第一个版本以来,JavaScript 已经改进了它的标准库,但是与其他语言相比,它还有相当长的路要走。Deno 试图改进这一点,并声称拥有一个非常完整的标准库,允许开发人员使用官方工具来执行基本任务,只是在执行复杂的任务时需要使用外部库(ala NPM)。
从本质上讲,Deno 提供了一些开箱即用的工具,例如,它可以为终端文本添加颜色、使用外部数据结构(例如二进制、csv、yaml 等)、生成 UUID 甚至编写 WebSocket 等等。它还提供了其他更基本的模块,如文件系统访问、日期助手函数、HTTP 相关函数等等。
集成的 TypeScript
你没看错,如果你是 TypeScript 的爱好者,那么 Deno 就可以满足你的需要。不需要外部工具,默认情况下,将 TypeScript 代码转换为 JavaScript 是在内部完成的,因此你无需担心。
尽管默认情况下,Deno 会处理很多事情,但是你也可以使用自己的 tsconfig.json 文件覆盖默认配置:
deno run -c tsconfig.json [your-script.ts]
默认配置使用严格模式,因此任何未经深思熟虑的编码实践都会立即得到警告。
不再有 NPM 或 node_modules 文件夹
因为每个软件都需要尽量兼容它的各个前代版本,所以这成了一个大问题。Node.js 的文件夹太臃肿了吗?分发依赖关系的方式是错误吗?这绝对是 Node.js 最具争议的方面之一,而 Deno 决定彻底摆脱它。
那么,Deno 如何处理依赖关系呢?在这个版本中,它的做法是:允许你从任何地方导入你所需要的模块。换句话说,你可以简单地执行以下操作:
import * as log from "https://deno.land/std/log/mod.ts";
Deno 不再需要拥有自己的集中式存储库,但是在执行此操作时你必须谨慎,因为从无法控制的第三方来源导入模块,可能会导致你处于公开状态,并暴露于外部世界中。
实际上,我们的好朋友 package.json 文件也不再使用了,现在通过将模块列表及其对应的 URL 放入一个名为 deps.ts 的文件中,简化了依赖管理。而对于版本控制,你可以在 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 行脚本,代码如下:
用户 Caesar2011 将上述脚本作为其代码库的一部分发布,你可以在这里找到完整的代码。
Deno 会很快取代 Node.js 吗?
不见得会。说实话,这个标题看起来有点像是骗取点击的诱饵。我们中的一些人在 Node.js 发布版本 0.10 的时候就开始使用它了,并且是在生产环境中使用它!告诉你真相有点吓人,但是我们这么做是因为当时周围没有类似的东西。php、Python 甚至 Ruby(更不用说 Java 或.NET)都无法与这样一个在服务器端支持 JavaScript 和异步 I/O 模型的软件相提并论。经历了这么多年,Node.js(和 JavaScript)已经发展到可以满足整个行业的要求。但是它完美吗?当然不是!但是,就像生活中的任何其他事物一样,任何编程语言都不是完美无缺的。
Deno 也没有什么不同。现在发布的 Deno,只是对一个想法在过去大约两年工作的总结。它还没有被投放到生产环境中进行尝试和测试。也尚未对它进行过审查,并将它放入各种奇怪的和异常的用例中,以了解其如何处理各种边界情况。在这些工作完成之前,Deno 只是一个供早期采用者使用的玩具。也许一年后,我们会开始听到一些公司分享他们的经验,以及他们是如何解决新发现的问题的。最终,它的支持社区将对其进行调整,使其变得更加实用。那么,Deno 最终会取代 Node.js 吗?没有人知道答案!我们将对其拭目以待。
英文:What is Deno and will it Replace NodeJS?
链接:https://blog.bitsrc.io/what-is-deno-and-will-it-replace-nodejs-a13aa1734a74
作者简介:Fernando Doglio,Globant 技术经理,多本技术书籍作者,包括《Scaling Your Node.js Apps》、《REST API Development with Node.js》、《Reactive Programming with Node.js》等,其中有《Python 性能分析与优化》经图灵引进已在国内上架中文版。
翻译:苏本如,责编:唐小引
欢迎更多技术人微信搜索「donyintxy」(备注:姓名+公司+职位)向 CSDN 投稿。
更多精彩推荐
☞
☞
☞
你点的每个“在看”,我都认真当成了喜欢
以上是关于Deno 会取代 Node.js 吗?的主要内容,如果未能解决你的问题,请参考以下文章