亚马逊AWS官方博客

什么是 Deno?

一种适合于 JavaScript 和 TypeScript 的运行时 Deno 1.0 已于 5 月推出,它提供有一些面向 JavaScript 开发人员的具有吸引力的功能,包括:

  • 安全默认设置:必须授予 Deno 应用程序显式权限才能访问磁盘、网络和运行时环境。
  • 本地 TypeScript 支持:无需 tsconfig — Deno 充当本地 TypeScript 运行时。Deno 在后台仍然会转译和捆绑 TypeScript 文件。
  • 能够直接从 URL 导入 ES 模块:不再需要直接通过 URL 或文件路径导入其他 NPM 依赖项:
import toUpperCase from 'https://flavio-es-modules-example.glitch.me/uppercase.js';

Deno 处理 ES 模块的方法会生成许多与程序包管理相关的争议,尤其是与安全相关的争议。例如,这是否会阻止其他 left-pad 事件? 无论您的本能反应如何,我都强烈建议您阅读此文档

我认为,import-from-URL 的明确性将会让开发人员谨慎地考虑依赖项管理;但是,我怀疑许多团队将会以处理 npm 的方式来处理此问题:那就是通过锁定文件代理和白名单内部注册表。

Deno 还包括一些我比较感兴趣但使用不多的功能:

说得差不多了,让我们通过构建一个简单的 Web 应用来试用一下 Deno:

import { serve } from "https://deno.land/std@0.50.0/http/server.ts";

const s = serve({ port: 8000 });
console.log("http://localhost:8000/");
for await (const req of s) {
  if (req.url.startsWith("/ping")) {
    req.respond({ status: 200, body: "pong" });
  } else if (req.url.startsWith("/hi")) {
    req.respond({ status: 200, body: "hello there." });
  } else {
    req.respond({ status: 404, body: "Not Found." });
  }
}

本演示使用 HTTP 标准库并处理两个路由:/ping/hi。请注意在没有封闭异步 IIFE 的情况下使用 for await … of安装 Deno,然后运行:

# 本地运行
deno run demo.ts 

# 通过远程 URL 运行
deno run https://gist.githubusercontent.com/robzhu/ef4e76d27ca50a920a9e5b4aebb40ab9/raw/6bef3fa5eb6bca5f439c3fde75ce2e39cf4cd451/demo.ts

无论采用哪一种方式,您都会看到以下错误:

错误:未捕获 PermissionDenied:对“0.0.0.0:8000”的网络访问,请使用 --allow-net 标志重新运行
    at unwrapResponse ($deno$/ops/dispatch_json.ts:43:11)
    at Object.sendSync ($deno$/ops/dispatch_json.ts:72:10)
    at Object.listen ($deno$/ops/net.ts:51:10)
    at listen ($deno$/net.ts:152:22)
    at serve (https://deno.land/std@0.50.0/http/server.ts:261:20)
    at https://gist.githubusercontent.com/robzhu/ef4e76d27ca50a920a9e5b4aebb40ab9/raw/6bef3fa5eb6bca5f439c3fde75ce2e39cf4cd451/demo.ts:3:11

由于它是一个 HTTP 服务器,因此,我们需要授予显式的网络访问权限:

# 本地运行
deno run --allow-net demo.ts 

# 通过远程 URL 运行
deno run --allow-net https://gist.githubusercontent.com/robzhu/ef4e76d27ca50a920a9e5b4aebb40ab9/raw/6bef3fa5eb6bca5f439c3fde75ce2e39cf4cd451/demo.ts

现在,您应该可以通过导航至 http://localhost:8000/hi 来测试您的服务器。到目前为止一切都还顺利,但是 URL 太长:有没有一种简单的方法将其作为脚本安装呢?

deno install --allow-net -n denohttp https://gist.githubusercontent.com/robzhu/ef4e76d27ca50a920a9e5b4aebb40ab9/raw/6bef3fa5eb6bca5f439c3fde75ce2e39cf4cd451/demo.ts

# 运行脚本:
denohttp

我希望此博文能够让您大概了解 Deno。

Deno 根据 MIT 许可证发布。访问 Deno GitHub 存储库Deno 网站,以了解更多信息。