Categories
程式開發

Deno 1.0发布:为JavaScript和TypeScript提供安全运行时环境


经过了为期2年的开发,Deno终于在2020年的5月份完成了1.0版本。其官方网站宣称,Deno为JavaScript和TypeScript提供了一个安全的运行时环境。听起来是不是和Node.js类似?没错,就是这样,因为Deno是由Node.js的原班人马开发的。Ryan Dahl(Deno和Node.js作者)之前发表过一篇文章——“关于Node.js最让他后悔的10件事”。为了解决文章中提到的问题,他创造了Deno。和Node.js 一样,Deno可以在V8引擎上运行JavaScript,TypeScript和WebAssembly应用。对于应用开发者来说,相对于Node.js,在使用Deno开发时有些地方是需要注意的。

在模块方面,Node.js是二进制模块化文件,而Deno是单个二进制文件应用。它没有使用像NPM那样复杂的依赖管理解决方案。取而代之的是,当开发人员需要定义依赖关系时,只需要在源码中直接使用URL即可。截至目前,已经大约有超过500个第三方的Deno模块可以供使用。看看这种方式是否可以在企业应用中进行推广,将是一件很有趣的事情。因此,Deno通常不兼容那些为专门为Node.js编写的NPM包。不过,移植并非难事,因为它们使用了相同的编程语言和框架。Deno已经支持了大量的Node.js内置库对象。与Node.js相比,Deno的运行时默认就是安全的,因此如果应用需要访问文件系统或者网络,那么开发者就需要进行额外的声明。

在API编程方面,Deno优先支持TypeScript。Deno的运行API大量的采用了TypeScript或JavaScript中的Promises和async/await API,这些API在Node.js被设计时还不被支持。除了TypeScript和JavaScript,Deno应用还可以加载和执行WebAssembly的字节码程序。例如,在Deno中,Sqlite模块就被从C++编译成了WebAssembly。此外,开发者还可以使用Rust对Deno进行扩展,这将允许使用Cargo(Rust的依赖和包管理系统)来管理Deno的插件和附加组件。

在底层方面,Deno使用Rust,而没有像Node.js那样使用C或者C++来访问底层V8引擎。同时,在支持web应用的高并发时,Deno使用了Rust的Tokio,而不是libuv。

虽然Deno才刚刚完成1.0版本,但是它已经得到了很多业内知名人士的支持。其中,有诸如AWS LambdaAzure Functions和 Google Cloud Run之类主流云供应商;也有来自Begin.com的布赖恩·勒鲁(Brian Leroux),他同时还在AWS上对Deno进行了测试,且宣称Deno的启动时间只需要短短的6秒;还有JetBrain的WebStorm(最受欢迎的JavaScript的IDE)也宣布支持Deno。

然而,在对Deno的未来一片看好的情况下,依然还有大多数的开发人员相信Node.js会继续存在下去,且未来Deno很难超过Node.js。这些开发者们的理由是Node.js有庞大的生态系统和大量的企业应用。

Fernando Doglio(Node.js专家和书籍作者)说到:
Deno目前还只是一个经过了2年研发的想法,还没有在生产系统进行实践和测试。因此它现在还只适合给早期使用者玩玩。

在Deno1.0版本发布之后的三周里,Deno团队已经发布了5个小版本,主要是为了修复一些bug。Deno的下一个版本是v1.1,该版本的计划是对CLI、公共API及其Rust插件系统进行改进。要了解更多关于Deno的未来计划,请查看即将在公开的OpenJS世界大会上Ryan Dahl的演讲

Deno是基于MIT协议的开源软件。如果想对Deno项目进行贡献和支持的话,需要遵循它的贡献指南

原文链接:

https://www.infoq.com/news/2020/06/deno-1-ready-production/