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 Lambda , Azure 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 项目进行贡献和支持的话,需要遵循它的贡献指南。
作者:Vivian Hu
译者:许学文
来源:InfoQ