2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 什么是 Deno 它与 Node.js 有何不同?

什么是 Deno 它与 Node.js 有何不同?

时间:2021-03-29 16:14:18

相关推荐

什么是 Deno 它与 Node.js 有何不同?

Node.js 是用于服务器和本地机器的事实上的 JavaScript 运行时。它很受欢迎,用途广泛,并得到了强大社区的支持。Deno 是一个更新的运行时,旨在解决 Node.js 的一些缺点。这就是 Deno 希望改进的地方。

基础

从历史上看,JavaScript 被委托给网络。像 Node.js 这样的运行时扩展了 JavaScript 开发人员可以定位的环境,使得使用该语言构建后端系统变得可行。

Node.js 和Deno都建立在 Chrome 浏览器使用的 V8 JavaScript 引擎之上。Node.js 成立于 年,而 Deno 于 年出现。这两个项目都是由 Ryan Dahl 创建。Deno 是 Dahl 尝试利用前十年的经验来改造 Node.js。

Deno 专注于提供设计安全的轻量级运行时。它还内置了对TypeScript 的支持,这是 Microsoft 主导的 JavaScript 类型化超集,在整个生态系统中变得越来越流行。直接这使得 Deno 成为更喜欢使用 TypeScript 提供的类型保护的人的更好的候选人。

安全和权限

Deno 前提的很大一部分建立在安全性之上。这延伸到它所用的语言:尽管 Node.js 和 Deno 都使用 V8,但 Deno 避开了 Node 的 C++,转而使用更现代的 Rust 语言。Rust 提供类似的性能水平,但具有更高的安全性。

Deno 具有严格的权限系统,可以限制进程可用的功能。在明确授予访问权限之前,他们无法访问网络、文件系统或外部环境。相比之下,任何用 Node.js 执行的东西都可以自动使用这三者。

需要访问的脚本的选择加入过程提供命令行标志或运行时权限提示的选择。标志可以非常细化,例如–allow-read=/tmp允许文件系统访问单个目录。这使用户和管理员能够将程序限制在他们所需的最低访问级别。

去中心化的包裹管理

不管喜欢还是讨厌,npm(节点包管理器)已成为大多数现代 JavaScript 开发不可或缺的一部分。npm 是 Node.js 的一个单独项目,理论上也可以与 Deno 一起分发。Deno 不包含它,并且不支持使用node_modules目录中的包。

Node.js 偏爱 CommonJS 模块,因为它的模块支持早于将原生 ES6 模块添加到 JavaScript 标准。Deno 需要使用 ES 样式的导入,并允许在任意远程 URL 上使用模块:

import {anExport} from "/example-package/a-module.ts";

Deno 会在您第一次运行程序时自动下载并编译模块。然后它会缓存结果;就像npm install, Deno 程序将在执行一次性下载后离线时工作。

选择这种方法来代替 npm 包的集中分发。Node.js 程序通常与中央 npm 注册表中的软件密不可分。如果 npm 不可用,全世界的开发人员将无法获得他们的依赖项。Deno 提倡在任何地方托管模块,任意 HTTP URI 成为可接受的“注册表”。

标准库和 Node.js 互操作

Deno 包含一个由核心开发团队审查的相当大的模块标准库。标准库中的每个模块都是独立的,没有外部依赖。该库独立于 Deno 版本进行版本控制和分发;就像第三方模块一样,您需要使用 URL 来导入代码中的组件。

标准库中的一个模块是Node.js的兼容层。这增加了 Node.js 中包含的许多关键模块的实现。它可以更轻松地将为 Node 编写的软件过渡到 Deno 运行时。

年 10 月发布的Deno 1.15进一步增强了与Node.js的兼容性。一个新的 CLI 标志–compat指示 Deno 使用 Node.js 提供的所有全局变量配置环境。processDeno 不支持类似的内置插件,但使用–compat它们可以在选择加入的基础上使用。

我应该使用哪个?

Deno 不太可能在短期内取代Node.js,如果有的话。虽然 Node 并不完美,但正如 Deno 恰如其分地强调的那样,它具有庞大的社区和非常强大的采用率的优势。从 Node.js 迁移到 Deno 并非易事;尽管核心 JavaScript 没有改变,但您需要考虑全局变量、标准库组件和包管理方面的差异。

在可预见的未来,Node.js 可能仍然是通用 JavaScript 程序的最佳选择。有大量可用的框架、库和教程。Node 在过去几年也没有停滞不前——现在稳定支持ES6 模块和其他语言功能,如顶级await.

Deno 是 JavaScript 生态系统最前沿的新项目的更好选择。如果你正在使用 TypeScript,想要一个去中心化的包管理系统,或者你需要强大的安全控制,那么 Deno 是更合适的选择。

虽然 Deno 在宣布后的三年里引起了很多兴趣和炒作,但这还没有转化为大规模的现实世界使用。但这并不意味着你不应该使用它——Deno 现在很稳定,并得到了强大的标准库的支持。

最好根据 Node.js 和 Deno 的个别特性评估您的每个新项目,然后判断您使用哪个。尝试为每个代码库使用相同的运行时可能意味着您会错过其他平台的一些优势。

概括

Deno 是来自 Node.js 原始开发人员的年轻 JavaScript 运行时。它解决了 Node 的许多缺点,避免了完全分布式模型的集中式包管理,添加了细粒度的运行时级权限模型,并将 TypeScript 集成为一等公民。

尽管 Deno 尚未达到与 Node.js 相同的范围,但它已经是您下一个项目的一个有价值的竞争者。如果您想切换到 TypeScript 或正在开发安全关键的工作负载,则尤其如此。

现在 Deno 正在积极添加增强的 Node.js 兼容性,兴趣和采用率可能会开始增长。该杰诺的团队在努力完成全面节点仿真,可能提供了现有项目的可行途径过渡。

Deno 的动力最终可能来自外部因素,例如 TypeScript 生态系统的强劲增长。Deno 的标准库是用 TypeScript 编写的,展示了它对项目的重要性。尽管 Node.js 和 TypeScript 可以轻松集成,但您需要一个中间构建阶段将 TypeScript 源代码转换为 Node 可以执行的 JavaScript。Deno 缩短了反馈循环,从一开始就通过集成的 TypeScript 提供改进的开发人员体验。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。