5月13日,Node之父RyanDahl及Deno团队精心筹划2年的Deno1.0正式发布,这是一个在服务端运行的、全新的JavaScript运行时。值得探究的是Deno1.0并不与当前Node.js完全兼容,这是否意味着Deno将会取代Node?寻找答案还需要从了解Deno1.0开始。
Deno的诞生故事
年,Ryan做了一次演讲,他谈到了他认为Node.js的十大错误之处。在演讲的最后,他公布了Deno项目,当时它还只是一个小项目,Ryan将在这个项目中构建一个称为Node.jsv2的东西,它将对Node.js作些改进,并且使其更加安全。
两年后Deno1.0正式发布。作为一个在服务端运行的、全新的JavaScript运行时,它所使用的语言是Rust,而非C++。同时,它基于Tokio平台(它提供JavaScript所需的异步运行时),并且仍然运行谷歌的V8引擎。
Deno的新特性
由于Deno并不与当前Node.js完全兼容,Ryan称已将一些他认为在Node.js的早期创建中缺失的一些特性放入到了Deno中。
集成的安全性
默认情况下,Node.js允许你访问所有内容。也就是说,你可以读写文件系统、发出请求、访问环境变量等等。虽然作为一个开发人员,拥有这种访问权限是一个好处,但如果在编写自己的代码时不小心,也会带来安全风险。
而Deno则不同,它使用命令行参数来启用或禁用对于一个访问不同的安全特性。比如说,如果你需要对脚本启用访问/etc文件夹的权限,你可以执行以下操作:
deno--allow-read=/etcmyscript.
这样一来,你的脚本代码从可以从/etc文件夹中读取任何内容,而其他的东西想要执行同样的读取操作将会遇到安全异常。这与其他平台处理安全性的方式类似。如果你是一个安卓用户,那么肯定有很多应用程序曾要求你允许它们访问手机内部的不同系统(例如联系人,电话,文件夹等),同样的概念也可以在这里应用。通过在执行脚本的命令行中使用这些标志,可以提供代码所需的权限。
更完整的标准库
自从Node.js的第一个版本以来,JavaScript已经改进了它的标准库,但是与其他语言相比,它还有相当长的路要走。Deno试图改进这一点,并声称拥有一个非常完整的标准库,允许开发人员使用官方工具来执行基本任务,只是在执行复杂的任务时需要使用外部库(alaNPM)。
从本质上讲,Deno提供了一些开箱即用的工具,例如,它可以为终端文本添加颜色、使用外部数据结构(例如二进制、csv、yaml等)、生成UUID甚至编写WebSocket等等。它还提供了其他更基本的模块,如文件系统访问、日期助手函数、HTTP相关函数等等。
集成的TypeScript
你没看错,如果你是TypeScript的爱好者,那么Deno就可以满足你的需要。不需要外部工具,默认情况下,将TypeScript代码转换为JavaScript是在内部完成的,因此你无需担心。
尽管默认情况下,Deno会处理很多事情,但是你也可以使用自己的tsconfig.json文件覆盖默认配置:
denorun-ctsconfig.json[your-script.ts]
默认配置使用严格模式,因此任何未经深思熟虑的编码实践都会立即得到警告。
不再有NPM或node_modules文件夹
因为每个软件都需要尽量兼容它的各个前代版本,所以这成了一个大问题。Node.js的文件夹太臃肿了吗?分发依赖关系的方式是错误吗?这绝对是Node.js最具争议的方面之一,而Deno决定彻底摆脱它。
那么,Deno如何处理依赖关系呢?在这个版本中,它的做法是:允许你从任何地方导入你所需要的模块。换句话说,你可以简单地执行以下操作:
import*aslogfrom