学习Deno:一个安全的JavaScript和TypeScript运行时

尼尔森雅克
分享

2020年5月发布了Deno 1.0,这一直是一个非常受欢迎的话题。如果你想知道有什么大惊小怪的,你来对地方了!

在本文中,我希望给您一个关于Deno的概述。我们将了解它的主要特性,并询问您为什么要开始学习这个新工具。

Deno是什么?

那么Deno是什么,为什么要创建它呢?它是JavaScript和打印稿运行时,这意味着您可以用这两种语言编写程序并从命令行执行它们。与在浏览器中运行的JavaScript不同,Deno程序可以访问主机上的资源,例如文件系统和环境变量。

如果你知道的话node . js如果你觉得Deno听起来很像,那你是对的。Deno是Node的创造者Ryan Dahl的创意,他创造Deno是为了解决他所看到的问题Node的设计缺陷.该项目的目标是提供一个默认安全的脚本环境,将TypeScript视为一流语言,并尽可能与浏览器兼容(如果可行)。

安全特性

Deno被设计为安全的开箱即用。默认情况下,所有代码都在安全的沙箱中执行,这意味着您需要给予显式权限以允许程序访问网络或文件系统。

程序可以通过以下命令行标志授予权限:

  • ——,允许所有:允许所有权限(禁用所有安全性)。
  • -allow-env:允许获取和设置环境变量。
  • -allow-hrtime:允许高分辨率的时间测量(可用于定时攻击和指纹识别)。
  • -allow-net = \:允许网络访问。可选地接受逗号分隔的域白名单。
  • -allow-plugin:允许加载插件(不稳定特性)。
  • 允许读= \:允许文件系统读访问。可选地接受以逗号分隔的目录或文件白名单。
  • -allow-run:允许运行子进程。
  • 允许写= \:允许文件系统写访问。可选地接受以逗号分隔的目录或文件白名单。

一流的TypeScript支持

正如我前面提到的,Deno可以执行这两种JavaScript而且打印稿。更重要的是,它支持TypeScript作为一流语言。这意味着它可以加载和运行TypeScript代码,而不需要任何额外的构建步骤。不需要设置额外的工具来首先将代码转换为JavaScript。

当然,由于TypeScript是现代JavaScript的超集,如果你愿意,你也可以用优秀的旧JS编写代码!Deno支持一些很棒的、对开发者友好的特性,比如ES Module导入

使用外部代码

正如Ryan在演讲中提到的,他为Deno设计的目标之一是避免对包管理器的需求。不像运行时/语言,如Node.js和PHP(使用npm和编写器包管理器),Deno没有包管理器。

相反,外部包直接通过URL导入:

进口客户端“https://deno.land/x/mysql@2.2.0 mod.ts”

第一次运行脚本时,Deno将获取、编译和缓存所有导入,以便后续启动速度极快。显然,有时您可能希望强制它重新获取导入,您可以使用缓存子命令:

重新加载my_module.ts

包托管

虽然Deno本身不提供包注册表,但有一个可用的第三方模块列表.该服务提供了一个标准化的、版本化的URL,映射到模块的GitHub repo。您可以按名称搜索包并查看简要描述,并单击查看包自述。

标准库

Deno提供了标准库-松散地基于Golang的-它提供了一组没有外部依赖的高质量标准模块。

标准库中的包没有随Deno一起安装。相反,正如我们在前一节中看到的那样,它们可以在网上获得并链接到。模块是有版本控制的,允许你把你的代码固定到特定版本的使用:

进口复制“https://deno.land/std@0.50.0 / fs / copy.ts”

这意味着您编写的任何依赖于标准库中的模块的代码都应该在未来的版本中继续工作。

这个库包含了构建命令行和基于http的应用程序可能需要的各种帮助程序和实用程序:

  • 存档:使用tar文件的模块
  • 异步:异步工具
  • 字节:用于处理二进制数组的帮助程序
  • datetime:用于将日期字符串解析为日期对象
  • 编码:用于处理base32、二进制、CSV、TOML和YAML格式的编码器
  • 旗帜:命令行参数解析器
  • fmt:用于打印格式化输出的工具
  • fs:用于处理文件系统的帮助程序
  • 哈希:一个使用各种算法创建哈希的模块
  • http:创建HTTP服务器、文件服务器、操作cookie
  • io:用于字符串输入/输出的实用程序
  • 日志:简单日志模块
  • mime:支持多部分数据
  • 节点: Node.js代码的兼容层(目前正在进行中)
  • 路径:路径操作实用程序
  • 权限:用于检查和提示安全权限的助手
  • 信号:处理Deno进程信号的助手
  • 测试:用于Deno内置测试运行器的测试断言
  • uuid:用于生成和验证uuid的实用程序
  • ws:用于创建WebSocket客户端和服务器的助手

安装Deno

Deno作为单一可执行文件发布,没有依赖关系。您可以从发布页面,或使用下面的安装程序安装:

Shell (macOS, Linux):

旋度-fsSL https://deno.land/x/install/install.sh|上海

PowerShell (Windows):

Iwr https://deno.land/x/install/install.ps1 -useb|iex

家酿(macOS):

酿造安装deno

升级

安装完成后,Deno还可以使用以下命令将自己升级到最新版本:

deno升级

或者,你可以升级/降级到一个特定的版本:

Deno升级——版本1.0.1

未来是光明的

的Deno手册这表明它“是历史上用Bash或Python编写的实用程序脚本的伟大替代品”。虽然这当然是真的,但我希望看到它越来越多地用于Node.js目前流行的相同用例。现在已经出现了许多类似Express/ koa的框架,允许您构建类型安全的REST api,同时也有越来越多的第三方模块可用。

所以,你应该忘记node。js和开始学习Deno吗?目前业界的观点是,Node.js不会很快消失,但Deno绝对是一项值得关注的技术。

Deno基金会

学习Deno与我们的Deno基金会集合。在我们发布的时候,你会在这里找到我们所有的Deno报道,以一种对初学者最有帮助的方式组织起来。

Deno基本面

Deno项目

Baidu