阅读 232

快速入手 Deno | 🏆 技术专题第九期征文

Deno介绍

  Deno是一个简单、现代、安全的JavaScriptTypeScript运行时环境,它使用V8,内置在Rust中用来运行。从官网中可以了解到它有以下特点:

  • 环境是安全的。
  • 支持TypeScript的开箱即用。
  • 只需要一个可执行文件。
  • 具有内置的工具(eg:依赖检查器、代码格式化器)。
  • 内含一组审核的标准模块。

  上述是官文中着重突出的几点,当我们查看功能列表时,发现还有以下方面优势之处:

  • Deno 基于最新的 JavaScript 语言;
  • Deno 具有覆盖面广泛的标准库;
  • DenoTypeScript 为核心,配以更多独特的方式从而带来了巨大的优势,其中包括一流的 TypeScript 支持(Deno 自动编译 TypeScript 而无需你单独编译);
  • Deno 大力拥抱 ES 模块标准;
  • Deno 没有包管理器;
  • Deno 具有一流的 await 语法支持;
  • Deno 内置测试工具;
  • Deno 旨在尽可能地与浏览器兼容,例如通过提供内置对象fetch和全局 window 对象。

tips:

Question:可能有些人会有疑问?为什么有了node之后还会出现deno。以及他们之间的差值在哪里?
Answer:因为 NodeAPI 是基于回调机制的,因为 Node 是在 PromiseAsync / Await 定义在标准之前编写的。Node 中无法对此机制进行全新的更改,因为此类更改将产生“毁灭性”的影响。因此,在 Node 中我们陷入了回调大量 API 的困境。但是这里只是说明了存在的问题,并不代表Deno就可以取代Node

实战Demo

  通过上面的简单介绍,想必我们对其有了大致的印象,让我们用一个小的Demo让大家快速入门其中。

环境准备

操作系统:Mac OS
安装软件: Homebrew(安装方式很多,详情看官网)

命令介绍

  • bundle :将项目的模块和依赖项捆绑到单个文件中;
  • cache :缓存依赖项;
  • completions :generate shell completions;
  • doc :显示某模块的文档;
  • eval :运行一段代码,例如 deno eval "console.log(1 + 2);
  • fmt :内置的代码格式化程序(类似于 Go 语言中的 gofmt);
  • help :打印某消息或某给定子命令的帮助信息;
  • info :显示有关缓存的信息或与源文件有关的信息;
  • install :将脚本安装为可执行文件;
  • repl :开启 REPL 环境(默认子命令);
  • run :运行给定文件名或 URL 的程序;
  • test :运行测试;
  • types :打印运行时的 TypeScript 声明;
  • upgrade :升级 Deno 到最新版本。

编写及运行

代码:

import { serve } from "https://deno.land/std/http/server.ts";
const s = serve({ port: 8000 });
console.log("http://localhost:8000/");
for await (const req of s) {
  req.respond({ body: "Hello World\n" });
}
复制代码

运行deno run app.ts之前,必须要先执行deno run --allow-net app.ts

  如果未执行后面的代码,则下面下载依赖的时候会报错,出现以下这种问题:

原因:
Deno 安全沙箱(Sandbox)

  有时候你想在 Web 浏览器之外运行一个 JavaScript 程序,却不想让它肆意在你的系统中访问任何它想要的东西,比如你电脑上面本身的秘钥的等。
  这个时候Deno 的解决方案是试图大量借鉴浏览器实现相同的权限模型——除非你明确允许,否则在浏览器中运行的任何 JavaScript 都不能在你的系统上做不正当的事情。

运行结果:

除了以上运行网络访问之外,还有以下权限控制(可以理解为RAM)。

  • --allow-env:允许访问环境变量;
  • --allow-hrtime :允许高分辨率时间测量;
  • --allow-net=<allow-net> :允许网络访问;
  • --allow-plugin :允许加载插件;
  • --allow-read=<allow-read> :允许文件系统读取权限;
  • --allow-run :允许运行子进程;
  • --allow-write=<allow-write> :允许文件系统写入访问;
  • --allow-all :允许所有权限(与-A相同)。

  以上文件是整个一大块填代码填充进去的,我们可以运行deno fmt app.ts来将文件里面的代码格式化。

结束语

  以上是对于一个Deno项目的简单介绍,当然Deno的出现也不仅仅只是多了一个Hello World的,总的来说对于node中不满足并且无法进行向后兼容而出现的。当然并不代表Deno也是很完美的,向后兼容的层面发展到底会变成什么样子,只能跟随时代走走看了。

目前Deno正在做的事情:

  • Deno 提供了一个内置的 fetch 实现,该实现与浏览器中可用的匹配。
  • Deno 正在进行与 Node.js stdlib 的兼容层。

更多的内容请小伙伴们访问deno.land/官网查看哦~

第九期征文活动正在进行中,小伙伴们赶紧开始吧===>传送门

文章分类
前端
文章标签