好程序员前端分享什么是Deno,它与Node.js的区别,Node.js的建立者Ryan Dahl花了一年半的时间研究deno,这是一个新的JavaScript运行时,能够解决Node的全部固有问题。
不要误解个人意思,Nodejs它自己就是一个很棒的服务器端JavaScript运行时,主要是由于它拥有很大的生态系统和JavaScript。然而,Node.js的建立者Ryan Dahl认可他应该考虑更多的-安全性,模块和依赖性,仅举几例。
在他的辩护中,并非说他能够想象平台在如此短的时间内会增加多少。此外,早在2009年,JavaScript仍然是这种奇怪的小语言,每一个人都取笑,并且它的许多功能尚未。
那么什么是Deno,主要特性有什么呢?
1.Deno是一个基于V8构建的安全的TypeScript的Google运行时引擎。
它创建了:
Rust(Deno的核心是用Rust编写的,node用C++编写的)
Tokio(以Rust编写的事件循环)
TypeScript(Deno支持开箱即用的JavaScript和typeScript)
V8(谷歌在Chrome和node中使用的JavaScript进行时)
2. 它支持Type2.8开箱即用,没有package.json,没有npm 不追求兼容Node,经过URL方式引入依赖而非经过本地模块,而且在第一次运行的时候进行加载和缓存,并仅在代码使用运行,依赖才会更新。
能够控制文件系统和网络访问权限以运行沙盒代码,默认访问只读文件系统可访问,无网络权限。V8 和 Golang 之间的访问只能经过 protobuf 中定义的序列化消息完成;
最终建立单一可执行文件;
支持 top-level 的 await;
最终的目标是兼容浏览器;
能够做为库引入,用于创建本身的 JavaScript runtime。
这几个特性,有不少个都是针对目前 NodeJs 的痛点而来的,包括无 package.json、依赖的引入和更新方式,针对的就是被普遍吐槽的过大的。
同时,再也不追求兼容 node,能够视为 ry 想完全抛弃 node 包袱,打造一个更好的 JS 运行时。前端
它的安全性也是很放心的,它最重要的功能之一就是安全性很高,与NodeJs相反,Deno默认执行沙箱中代码,这就意味运行是无权访问。 咱们来看看它的工做原理:
(async () => {node
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生态系统。webpack