什么是Deno,它与Node.js的区别

741 阅读3分钟

  Node.js的创建者Ryan Dahl花了一年半的时间研究deno,这是一个新的JavaScript运行时,可以解决Node的所有固有问题。

不要误解我的意思,Nodejs它本身就是一个很棒的服务器端JavaScript运行时,主要是因为它拥有很大的生态系统和JavaScript。然而,Node.js的创建者Ryan Dahl承认他应该考虑更多的-安全性,模块和依赖性,仅举几例。

在他的辩护中,并不是说他可以想象平台在如此短的时间内会增长多少。此外,早在2009年,JavaScript仍然是这种奇怪的小语言,每个人都取笑,而且它的许多功能还没有。

那么什么是Deno,主要特性有什么呢?

  1. Deno是一个基于V8构建的安全的TypeScript的Google运行时引擎。

它建立了:

  1. Rust(Deno的核心是用Rust编写的,node用C++编写的)
  2. Tokio(以Rust编写的事件循环)
  3. TypeScript(Deno支持开箱即用的JavaScript和typeScript)
  4. V8(谷歌在Chrome和node中使用的JavaScript进行时)

2. 它支持Type2.8开箱即用,没有package.json,没有npm 不追求兼容Node,通过URL方式引入依赖而非通过本地模块,并且在第一次运行的时候进行加载和缓存,并仅在代码使用运行,依赖才会更新。

  1. 可以控制文件系统和网络访问权限以运行沙盒代码,默认访问只读文件系统可访问,无网络权限。V8 和 Golang 之间的访问只能通过 protobuf 中定义的序列化消息完成;
  2. 最终创建单一可执行文件;
  3. 支持 top-level 的 await;
  4. 最终的目标是兼容浏览器;
  5. 可以作为库引入,用于建立自己的 JavaScript runtime。

这几个特性,有很多个都是针对目前 NodeJs 的痛点而来的,包括无 package.json、依赖的引入和更新方式,针对的就是被广泛吐槽的过大的。

同时,不再追求兼容 node,可以视为 ry 想彻底抛弃 node 包袱,打造一个更好的 JS 运行时。

它的安全性也是很放心的,它最重要的功能之一就是安全性很高,与NodeJs相反,Deno默认执行沙箱中代码,这就意味运行是无权访问。

我们来看看它的工作原理:

(async () => {

const encoder = new TextEncoder();

const data = encoder.encode('Hello world');

await Deno.writeFile('HelloWorld.txt', data);

await Deno.writeFile(' HelloWorld2.txt', data);

})();

该脚本创建了两个文本文件,其中包含一条消息。代码正在沙箱中执行,因此它无法访问文件系统。HelloWorld.txt HelloWorld2.txt Hello world

另请注意,我们正在使用Deno命名空间而不是fs模块,就像在Node中一样。Deno命名空间提供了许多基本的辅助函数。通过使用命名空间,我们正在失去浏览器兼容性。

当然我们用到Deno的时候,会想到浏览器的兼容性,Deno旨在浏览器兼容。从技术上讲,在使用ES模块时,我们不必使用任何构建工具(如webpack)来使我们的应用程序啊可以在浏览器中使用。

但是像Babel这样的工具会将代码转换成ES5版本的JavaScript,因此 即使在不支持该语言所用最新功能的旧版浏览器中,代码也可以运行。但这也是最终文件中包含大量不必要的代码并使输出文件膨胀为代价的。

由我们决定我们的主要目标是什么,并相应地做出选择。

TypeScript支持开箱即用

Deno使得无需任何配置文件即可轻松使用TypeScript。仍然可以用纯JavaScript编写程序并使用Deno执行它们而不会有任何麻烦。

Deno是TypeScript和JavaScript的新运行时,是一个有趣的项目,现在已经稳定增长了很长一段时间。但是在它被认为是生产就绪之前还有很长的路要走。

借助它的分散式方法,它需要从集中式软件包注册表(即npm)中释放JavaScript生态系统。