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

news/2025/3/19 13:30:52/

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

基础

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

Node.js 和Deno都建立在 Chrome 浏览器使用的 V8 JavaScript 引擎之上。Node.js 成立于 2009 年,而 Deno 于 2018 年出现。这两个项目都是由 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 "https://example.com/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 运行时。

2021 年 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 提供改进的开发人员体验。


http://www.ppmy.cn/news/682871.html

相关文章

k3cloud6.0文件服务器,K3Cloud系统集成配置详解

## K/3Cloud安装配置 1. 根据官方说明,正确安装K/3Cloud系统。安装完标准系统后需要安装易到家系统集成包,目前易到家系统集成包功能写入在了杰诺基础包中,杰诺基础包包含2部分,一个是产品许可包,一个是基础业务包&…

卡路里减肥助手隐私政策

隐私政策 最近更新日期:2021年12月30日 提示条款 您的信任对我们非常重要,我们深知个人信息对您的重要性,我们将按法律法规要求,采取相应安全保护措施,尽力保护您的个人信息安全可控。我们致力于维持您对我们的信任…

ArrayList常用方法

ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。 ArrayList 继承了 AbstractList ,并实现了 List 接口。 一、添加元素 ArrayList 类提供了很多有用的方法,添加元…

杰诺在线(垂直搜索引擎研发)

公司在企业搜索引擎领域占据着国内企业级搜索引擎市场的70%。奥搜科技结合垂直搜索引擎的市场 发展及需求,应用多年自主开发的垂直搜索引擎作为行业搜索服务平台, 配套文本挖掘基础件、网络信 息雷达和数据内容分发服务模块,分词模块,集群模块等, 向各行业推出智能、安全、跨平…

js实现输入身份证号得出生日、年龄和性别

在 JavaScript 中,你可以使用正则表达式来提取身份证号中的出生日期、年龄和性别信息。下面是一个实现此功能的例子: function parseIDCard(idCard) {// 正则表达式匹配身份证号格式var reg /^\d{17}[\dXx]$/;if (reg.test(idCard)) {// 提取出生日期v…

网络网络抓包:窥探数据的神秘面纱

网络抓包:探索网络数据的神奇世界 引言 在当今互联网时代,网络抓包是一项重要的技术,它允许我们捕获和分析网络传输的数据。通过网络抓包,我们可以深入了解网络通信的细节,并帮助我们调试和优化网络应用。本篇博客将…

科普:平板电脑主流芯片大集合(下)

为什么80%的码农都做不了架构师?>>> 说到处理器,我们在介绍了包括苹果、英特尔、英伟达之后,另一个名字不得不提,那就是三星。是的,这个横跨智能家电、移动终端的国际厂商,在芯片领域依然 占据…

x722网卡支持百兆吗_用200M宽带,电脑网卡却只有百兆?这样可以解决!

原标题:用200M宽带,电脑网卡却只有百兆?这样可以解决! 随着宽带提速,很多人家里的宽带已经跨过100M,向着200M甚至更高带宽进军。然而这时候问题就来了:并不是所有的电脑都自带千兆网卡&#xff…