对 Deno 说“是”?
让我们来谈谈 Deno 以及为什么它可能是 Node.js 的更好替代品。
在我们开始之前,什么是 Deno?
Deno 是一个用于执行 JavaScript 和 TypeScript 的命令行运行时。它是一个基于 V8 的框架,使用 Rust,并内置了 TypeScript 编译器。
我们将提到以下 Deno 酷炫功能:
- 默认安全执行
- 单个可执行文件
- 从 URL 导入
- 简单且与浏览器兼容的模块系统
- 开箱即用的 TypeScript
- 完整的开发环境
- 全套工具
那么为什么是 Deno?
如果 Node.js 已经运行良好,为什么要重写它呢?首先,自 2009 年 Node.js 设计以来,JavaScript 已经发生了巨大的变化。例如,async/await 和 promises 已经成为了标准。JavaScript 现在还拥有一个新的模块系统(ES 模块)、类型化数组(Node 最初设计时没有在 JS 内部使用二进制数据的概念)以及 TypeScript,后者是对 JavaScript 的一个很好的补充。
Node.js 还有改进的空间
其次,Node.js 存在一些问题,Ryan Dahl 在介绍 Deno 的演讲中提到了其中一些。由于包管理系统集中在一个地方,模块系统设计得很差。另一个问题与安全性有关。虽然 V8 本身是一个安全沙盒,但 Node 破坏了这个沙盒,以便执行诸如打开套接字和读取文件等操作。运行 Node 程序时,安全性会受到影响。
默认安全执行
另一方面,Deno 默认是安全执行的,这意味着当你在 Deno 中运行程序时,你无需信任它,因为默认情况下,你无权访问系统,也无法打开文件或套接字。Deno 允许人们安全地运行不受信任的第三方代码。
要允许你的应用访问网络,必须使用以下命令授予其授权:deno run --allow-net app.ts
为了与系统交互,Deno 允许用户选择各种权限,例如使用命令从文件系统读取--allow-read=/temp
。
单个可执行文件
这是 Deno 的另一个优势,据说它将永远保持这种优势。Deno 支持 Mac、Linux 和 Windows。它的目标是保持独立于系统库。
从 URL 导入
现在来看看最明显的变化。import {serve} from “https://deno.land/std@0.50.0/http/server.ts”
在 Deno 中,你可以从 URL 导入,其目的是取代整个模块系统。这使得代码分发更加便捷,因为现在可以从任何 URL 访问代码。Node 中的模块解析方案稍微复杂一些,因为需要处理 node_modules 和 index.js,这对于包括 TypeScript 在内的许多系统来说都很麻烦。
Deno 的方法更简单,只使用相对或绝对 URL。Deno 完全不依赖 NPM,而是直接通过 URL 导入库。在 Deno 中,模块和文件被视为同一概念,这简化了用户的思维模型。
简单且与浏览器兼容的模块系统
Deno 拥有一个不依赖于中心化服务器的模块系统。运行时透明地获取、缓存和编译代码。它可以使用下载缓存离线工作。这使得即使在没有互联网访问的情况下也能工作和获取资源,模拟与 npm install 相同的过程。首次运行时,您可以deno fetch
下载并缓存这些依赖项。
开箱即用的 TypeScript
最重要的是,Deno 开箱即用地支持 TypeScript,这意味着 TS 会被编译到 Deno 中。V8 Snapshots 功能可以快速启动 TS 编译器,无需每次都重新编译。它还可以开箱即用地处理 JavaScript,没有任何问题。
完整的开发环境
由于所有依赖项都以代码形式表示,因此不需要 package.json。deno info {url}
为您提供其中加载的所有模块的依赖关系树。deno info
也适用于 ES 模块,即使网络上有与 Deno 无关的随机 ES 模块。
全套工具
Deno 的愿景是将完整的工具集集成到一个二进制文件中。
借助deno install
、deno info
、deno bundle
和等命令deno fmt
,Deno 就像一个多功能工具,无需在您的计算机上安装任何其他程序即可运行程序。
最后的想法
因此,尽管 Deno 和 Node.js 同出一源,但有一些强有力的论据可以证明 Deno 确实可能是更简单、更高效的选择。但这并不意味着 Node.js 会被取代,最终还是取决于用户的偏好。
让我们知道你对 Deno 和 Node.js 的看法!你更喜欢哪一个?
还有一点需要注意的是,Codesphere 完全支持 Node.js 和 TypeScript,如果我们的社区有需求,我们也很乐意开箱即用地推出 Deno 支持。:)
鏂囩珷鏉ユ簮锛�https://dev.to/codesphere/say-yes-to-deno-4dj1