Deno什么鬼?“更胜一筹”的Node.js

一句话认知:Deno的创建者就是自Node.js的创建者——Ryan Dahl,是JavaScript和TypeScript的安全运行时 , 解决了Node的缺点 。 Deno是Node的字母异位词前两个字母与后两个对换了个位置 ^_^ 。
Deno什么鬼?“更胜一筹”的Node.js文章插图
0.导引如果您喜欢Node.js , 但不喜欢它的包管理器npm , 或者您想要一个比Node.js更安全的JavaScript运行时环境 , 您可能会发现新的开源项目Deno (Deno一词是Node的变位词) 。 另一方面 , 如果您在生产中使用Node.js , 那么这里就没有什么可看的了 , 可以走开——Deno仍然“处于开发阶段” 。 当你更多的了解了Deno后 , 你可能就会考虑开启Deno的旅程了——据说更适合现代化的软件开发需求 。
Deno是一个在浏览器之外运行JavaScript和TypeScript代码的程序 。 这是Ryan Dahl最近的努力 , 他在2009年创建了Node.js项目 , 它试图根据2009年以来JavaScript的进步来重新构想Node.js , 包括TypeScript编译器 。 类似Node.js , Deno本质上是谷歌V8 JavaScript引擎的外壳 , 但与Node.js不同的是 , 它在可执行映像文件中包含了TypeScript编译器 。
Deno是一个简单、现代、安全的JavaScript和TypeScript运行时 , 它使用V8 , 用Rust构建 , 当前可用版本为1.5.2() 。 简单概括Deno为:

  • 是默认安全的 。 除非显式启用 , 否则不能访问文件、网络或环境 。
  • 开箱即用式支持TypeScript 。
  • Deno只发布成一个可执行文件 。
  • 有内置的实用程序 , 如依赖项检查器(deno info)和代码格式化器(deno fmt) 。
  • 有一组经过评审(审计)的标准模块以保证与Deno协同 , 标准模块为:deno.land/std 。
1.Deno和高级JavaScript2009年 , 根据Dahl的说法,JavaScript缺少几个对Node.js有用的特性 。 这些年来 , 其中一些已经作为ECMAScript (ES)标准的一部分添加到JavaScript中 , TypeScript还解决了更多的问题 。
JavaScript基本上永远都有事件和回调 , 但它们可能会导致相当复杂的代码 , 特别是当您想要链接异步操作时 。 Promises使语法更具可读性 。 一个Promise是表示异步操作最终完成或失败的返回对象 , 您可以附加回调 , 而不是将回调传递到函数中 。 声明一个函数为async进一步简化了语法 , 允许您在函数中使用await以非阻塞的方式暂停 , 直到promise满足要求 。
在创建Node.js时 , JavaScript模块事实上的标准是CommonJS , 这是npm所支持的 。 从那时起 , ECMAScript委员会正式批准了一种不同的标准——ES Modules , 这正是jspm所支持的 。 Deno支持ES模块 。
【Deno什么鬼?“更胜一筹”的Node.js】类型化数组是一种处理二进制数据的ES6 API, Node.js已使用一些——原来缺乏对二进制数据的支持导致了Node.js的一些设计问题 。 Deno在需要操作原始二进制数据时使用类型数组 。 Node.js现在支持用户代码的类型化数组了 。
TypeScript是JavaScript的类型化超集 , 可编译成普通JavaScript (ES3或更高版本;它是可配置的) 。 TypeScript为JavaScript添加了可选的类型、类和模块 , 并支持用于大规模JavaScript应用程序的工具 。 (Anders Hejlsberg称之为“可伸缩的JavaScript”)正如前面提到的 , Deno包含了一个TypeScript编译器的映像 , 作为它运行时的一部分 。 如果向Deno传递一个TypeScript文件 , 它会首先将其编译成JavaScript , 然后将其传递给V8引擎 。
2.Node.js设计缺陷Dahl毕竟设计了Node.js和Deno , 根据他的说法 , Node.js遇到了三个主要的设计问题:
  • 模块系统设计不佳 , 分布集中化;
  • 必须支持大量的遗留APIs;
  • 缺乏安全性 。
而Deno修复了这三个问题 。
3.Deno安全执行Deno改进Node.js安全性的方式很简单:默认情况下 , Deno不允许程序访问磁盘、网络、子进程或环境变量 。 当您需要允许这些操作时 , 您可以选择使用命令行标志 , 它可以是任意粒度的 , 例如-allow-read=/tmp或--allow-net=google.com 。 Deno的另一个安全改进是 , 与Node.js不同的是 , 它总是会在未捕获的错误中死亡,而Node.js允许在未捕获的错误后继续执行 , 其结果可能是不可预测的 。
4.Deno模块在Node.js中使用require关键字加载CommonJS模块 , 标准的和第三方的模块都隐式地来自npmjs.com 。 在Deno中 , 使用import关键字加载ES模块并显式地声明URL 。 例如:
import * as log from "";Deno模块可以托管在任何地方——没有第三方模块的集中式存储库 。 此外 , 模块总是在本地缓存和编译 , 除非显式地要求刷新 , 否则不会更新 。 因此 , 您是应该能够运行已经在您的笔记本电脑上的Deno程序 , 只要所有的导入都曾被解析识别过一次 , 即使您在没有连接的飞机上也可 。