什么是 Deno?
2023-03-02 11:01:10 时间
一种适合于 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 网站,以了解更多信息。
相关文章
- re:Invent 2020 大会直播博客:Andy Jassy 主题演讲
- 企业微信、钉钉接收 Amazon CloudWatch 告警
- 使用 Amazon EKS 轻松运行 Flink 作业
- 推出 Amazon Managed Workflows for Apache Airflow (MWAA)
- 新增功能 – 适用于 AWS Lambda 的信任和完整性控件:代码签名
- 新增功能 – AWS Single Sign-On 支持基于属性的访问控制
- 通过 Elasticsearch 构建WAF日志分析系统
- 介绍 Amazon S3 Storage Lens — 组织范围内对象存储的可见性
- 现已为 AWS 托管的 Microsoft 活动目录启用多区域复制
- AWS Network Firewall — VPC 中的新托管防火墙服务
- 在 Amazon SageMaker 中构建一套定制化推荐系统
- 规划具有 Hot-Warm 架构的 Amazon Elasticsearch Service 集群
- SOCA 帮助半导体企业快速启动 EDA 云上部署
- AWS Organizations 中组织单元的最佳实践
- 利用技术手段实现对业务运行环境的持续安全合规检测
- 使用 Amazon Textract 与 Amazon Augmented AI 配合人工循环处理 PDF 文档
- 手把手教你快速将宁盾双因素认证(MFA)与 Amazon WorkSpaces 集成
- 基于 QuickSight 的成本可视化方案
- 手把手教你快速部署 Spot 实例并配置中断邮件警告
- Windows环境下python2.7安装mysql-python