亚马逊AWS官方博客
什么是 Deno?
一种适合于 JavaScript 和 TypeScript 的运行时 Deno 1.0 已于 5 月推出,它提供有一些面向 JavaScript 开发人员的具有吸引力的功能,包括:
- 安全默认设置:必须授予 Deno 应用程序显式权限才能访问磁盘、网络和运行时环境。
- 本地 TypeScript 支持:无需 tsconfig — Deno 充当本地 TypeScript 运行时。Deno 在后台仍然会转译和捆绑 TypeScript 文件。
- 能够直接从 URL 导入 ES 模块:不再需要直接通过 URL 或文件路径导入其他 NPM 依赖项:
Deno 处理 ES 模块的方法会生成许多与程序包管理相关的争议,尤其是与安全相关的争议。例如,这是否会阻止其他 left-pad 事件? 无论您的本能反应如何,我都强烈建议您阅读此文档。
我认为,import-from-URL 的明确性将会让开发人员谨慎地考虑依赖项管理;但是,我怀疑许多团队将会以处理 npm 的方式来处理此问题:那就是通过锁定文件、代理和白名单内部注册表。
Deno 还包括一些我比较感兴趣但使用不多的功能:
- 捆绑程序:Deno 可以将您的应用程序及其依赖项捆绑到单个文件中。
- 脚本安装程序:Deno 可以安装来自任何 URL 的脚本,将其命令行别名添加到相关路径,并在安装过程中要求显式权限。哇!
- 异步标准库:Deno 标准 API 使用 async/await 和 async iterators。
- 内置测试框架:Deno 包括一个具有顶级异步支持的内置测试框架。
说得差不多了,让我们通过构建一个简单的 Web 应用来试用一下 Deno:
本演示使用 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 网站,以了解更多信息。