📜  Deno.js |介绍

📅  最后修改于: 2022-05-13 01:56:48.759000             🧑  作者: Mango

Deno.js |介绍

简介: DenoJS是基于V8 JavaScript 引擎(由谷歌 Chromium 项目开发)、 Rust编程语言和TokioJavaScriptTypeScript安全运行时,Tokio 是 Rust 的异步运行时。 NodeJS也是一个使用 V8 引擎的 JavaScript 运行时。 DenoJS 1.0.0 于 2020 年 5 月 13 日发布,由 NodeJS 的创建者 Ryan Dahl 创建。

DenoJS 旨在成为一个高效且安全的脚本环境,为现代开发人员提供轻松的体验。 NodeJS 的创建者对 NodeJS 的功能表达了一些担忧。他们对 Node 的安全性、Node 如何处理包和 Node 中其他永远不会改变的遗留 API 等问题表达了担忧。 Node 于 2009 年发布,从那时起 JavaScript 发生了很大变化。他们想用现代 JavaScript 工具和 API 制作更好的 NodeJS 版本。他们还想要与浏览器和服务器环境兼容的东西,因此实现了 DenoJS。

DenoJS 的优点和特点:

  • 默认安全: DenoJS 的最大优势之一是它是默认安全的。它在沙盒环境中运行,除非特别允许,否则 Deno 不允许访问文件、环境或网络,这在 NodeJS 中是不允许的。要访问环境或网络,我们需要在执行 Deno 应用程序时明确添加安全标志和权限。如果没有添加相应的标志,它会在运行应用程序时给出PermissionsDenied错误。下面提供了安全标志列表
    • --allow-write:允许写访问
    • --allow-read:允许读取权限
    • --allow-net:允许网络访问
    • --allow-env:允许环境访问
    • --allow-plugin:允许加载外部插件
    • --allow-hrtime:允许高分辨率时间测量
    • --allow-run:允许子进程运行
    • -A:允许所有权限
  • Typescript: DenoJS 开箱即用地支持 Typescript。我们可以在开发 Deno 应用程序时使用 TypeScript 或 JavaScript,因为 TypeScript 编译器也包含在 Deno 中。因此,我们可以简单地创建一个新的.ts文件,它就会被 Deno 成功编译和执行。
  • 单个可执行文件: DenoJS 作为一个没有依赖关系的单个可执行文件发布。 Deno 试图提供一个独立的工具来快速编写复杂功能的脚本。就像网络浏览器一样,它知道如何获取和导入外部代码。在 Deno 中,单个文件可以定义复杂的行为,而无需任何其他工具。给定一个 Deno 程序的 URL,它只需要 15 MB 的内存就可以运行。 Deno 明确承担了运行时和包管理器的角色。
  • 去中心化包: NodeJS 的主要缺点之一是如何使用 NPM 包处理依赖关系。例如,如果我们想在 NodeJS 中使用Express ,我们只需使用npm安装,并且依赖项将转到node_modules文件夹。问题是当安装Express时,它根本就不是 Express 包。它还包括 Express 的依赖项。因此,我们最终在node_modules中有很多文件夹,这使得处理外部包的过程变得非常困难,并且增加了应用程序的大小。 DenoJS 提供去中心化包,即 Deno 不使用npm 。 Deno 没有 NPM 包,没有package.json文件,也没有node_modules依赖文件夹。它使用标准的浏览器兼容协议通过URL加载模块。它从应用程序中导入通过 URL 或文件路径引用的模块。如果我们想导入和使用外部模块,我们可以简单地从 URL 导入它:
https://deno.land/x/[Package_Name]
  • 浏览器兼容性: DenoJS 被设计为与浏览器兼容。完全用 JavaScript 编写且不使用全局Deno 命名空间的 Deno 脚本集也可以在现代 Web 浏览器中使用 Deno 执行,而无需更改任何代码。 Deno 还遵循标准化的浏览器 JavaScript API。由于 Deno 与浏览器兼容,我们可以访问并使用 JavaScript API,例如fetch 。我们还可以访问全局 JavaScript窗口对象。
  • ES 模块:与 NodeJS 不同,Deno 结合了现代 JavaScript 语法。 Deno 使用 ES 模块(导入语法)并且不支持 NodeJS 中使用的常见 JavaScript要求语法。所有外部 ES 模块都通过 URL 导入,就像在GoLang中一样,例如:
import { serve } from "https://deno.land/x/http/server.ts"

这个 Import 用于在 Deno 中创建一个简单的HTTP Server。 Deno 的另一个关键特性是,在导入此模块后,它会在加载时缓存到硬盘中。获取的远程代码将在首次执行时缓存到硬盘驱动器,并且在使用-reload标志运行代码之前永远不会更新。根据官方 DenoJS 文档,从远程 URL 加载的模块和文件旨在是不可变可缓存的。

  • 标准模块: Deno 拥有一套广泛的标准库模块,这些模块由 Deno 团队审核,并保证与 Deno 一起使用。这些标准模块托管在这里,并像所有其他与 Deno 兼容的 ES 模块一样通过 URL 分发。其中一些标准库是fsdatetimehttp等,很像 NodeJS 模块。 Deno 还可以从 Web 上的任何位置导入模块,例如 GitHub、个人网络服务器或 CDN(内容交付网络)。每天都有更多的标准模块以及外部模块被添加到 Deno。
  • 顶级等待:Deno的另一个核心和重要特性是顶级/第一类等待语法。在 Deno 中,我们可以在全局 Scope 中使用 Await 语法,而无需将其包装在Async 函数中。此外,Deno 中的所有异步操作都会返回一个Promise ,它可以移除/避免 Node 可能由于嵌套回调而导致的回调地狱
  • 实用程序: Deno 提供内置测试并具有内置实用程序,如依赖检查器 (deno info)和代码格式化程序(deno fmt) 。 Deno 还允许直接执行 WebAssembly WASM二进制文件。 NodeJS 以其 HTTP 和数据流功能而闻名,但是 Deno 能够比 Node.js 更有效地提供 HTTP 服务。

DenoJS 的安装:有关安装 DenoJS 的不同方法,请参阅此链接。我们将使用Chocolatey for Windows安装 Deno。要使用 Chocolatey 安装 Deno,请运行以下命令:

choco install deno

这会将本地系统上的 Deno 安装到默认的$HOME/.deno目录。这是默认的 Deno 的 Base 目录,并通过环境变量DENO_DIR进行引用。

使用 Chocolatey 安装 Deno

入门:要检查 DenoJS 安装,请运行以下命令:

deno --version

这应该为您提供 TypeScript、V8 引擎和 Deno 的版本。

deno --version

如果我们简单地执行命令:

deno

它运行命令:

deno repl

这打开了代表READ EVAL PRINT LOOPREPL接口,这意味着我们可以从命令行中输入基本的 JavaScript 代码,它将编译、执行并打印结果。

我们将在本地执行一个简单的 Deno 脚本,位于标准deno.land/std/ URL。我们可以使用以下命令直接从远程 URL 运行此脚本:

deno run https://deno.land/std/examples/welcome.ts

欢迎.ts

这是官方 Deno 文档示例中的welcome.ts脚本的链接。我们可以通过简单地导航到该 URL 来查看源代码。 deno run命令编译脚本并执行脚本以在控制台中显示结果。 Deno 自动知道我们是通过 URL 运行这个脚本还是只是在浏览器中查看它。

要在本地机器上安装脚本,我们可以运行以下命令:

deno install https://deno.land/std/examples/welcome.ts

这会将welcome.ts脚本安装到$Home/.deno/bin目录。该文件将在Windows上下载为.cmd文件。如果安装已经存在,我们需要显式覆盖它。

deno 安装

输出

注意:使用管理员权限运行 CMD 以避免 Deno 出现不必要的错误。
我们将在本地机器上创建一个welcome.ts文件并使用 Deno 执行它。
欢迎.ts

Javascript
console.log("Welcome to GeeksForGeeks");


要执行此文件,请运行以下命令:

deno run welcome.ts

输出:

输出