基于 Go 实现 Deno upgrade

1. Deno 简介

Deno 是一个基于 V8 引擎构建的 JavaScript 和 TypeScript 运行时,由 Rust 编写,旨在提供一种安全的、简单的、稳定的 JavaScript 和 TypeScript 运行环境。Deno 没有使用 Node.js 的一些问题,并提供了一些新的特性,如:声明式 JavaScript 模块依赖、只读文件系统访问和安全能力。

// TS 异步文件读取示例

import { Deno } from "deno";

async function readFile(filePath: string): Promise<string> {

const decoder = new TextDecoder("utf-8");

const data = await Deno.readFile(filePath);

return decoder.decode(data);

}

1.1 Deno 特性

相比 Node.js,Deno 具有一些独特的特性,如:

默认情况下,Deno 会拒绝网络、文件系统等访问。需要显式声明必需的访问权;

支持原生的 TypeScript 无需安装额外的编译器;

支持通过 HTTP 或 HTTPS 远程引入模块;

不允许同步 I/O,但是提供了异步版本的 I/O 操作。

1.2 Deno 和 Node.js 比较

Deno 和 Node.js 都是 JavaScript 的运行时,在使用上存在一些区别,如下表所示:

Deno Node.js
开发语言 Rust 和 TypeScript C++ 和 JavaScript
依赖管理 目前尚未提供官方的包管理工具,依赖通过 URL 和文件系统访问,类似 ES Modules NPM 是社区标准的包管理器
环境变量 可以设置环境变量,如:--allow-env 可以通过 process.env 访问环境变量
启动速度 启动时间较短 启动时间较长
默认模块 没有默认的模块 有一些核心模块,如:fs, http, url 等
同步 API 不允许同步 I/O 操作 有许多同步 API 接口

2. Deno Upgrade 操作方法

2.1 安装和升级 Deno

安装 Deno 非常简单,可以使用以下命令:

curl -fsSL https://deno.land/x/install/install.sh | sh

升级 Deno 可以使用以下命令:

deno upgrade

升级时,如果需要指定版本,可以使用以下命令:

deno upgrade --version 1.0.5

2.2 Deno Upgrade 的功能和改进

在最新版本的 Deno 中,有以下功能和改进:

引入了自己的包管理器 Deno Land,允许在代码中使用 URL 引入模块;

加入了对 Web Crypto API 的支持;

支持启动时动态权限分配。

Deno Land 是一种新的包管理器,旨在简化依赖管理流程,类似于 Python 的 PyPI 和 Ruby 的 RubyGems。它允许您从 URL 引入包,如下所示:

import { uuid } from "https://deno.land/std/uuid/mod.ts";

这个 URL 指向 Deno Land 上的标准 UUID 模块。当您首次导入模块时,Deno 会将其下载到本地进行缓存,并再次引用模块时使用缓存版本。由于缓存是通过模块 URL 的哈希值进行的,因此您可以放心地在不同的位置引用相同的模块,并确保代码的一致性。

在最新版本的 Deno 中,还增加了对 Web Crypto API 的全面支持,这是一个将密码学与 Web API 结合的 JavaScript API 集合。Web Crypto API 提供了各种各样的方法和对象,如加密、密钥导出和签名,以帮助您开发更为安全的 Web 应用程序。

最新版本的 Deno 还增加了启动时动态权限分配。现在,您可以根据需要直接在 Deno CLI 中指定启动权限,而无需在代码中显式声明它们。这使得代码更加具有可移植性和灵活性:

deno run --allow-read --allow-write index.js

在上面的示例中,我们不需要将权限写死在代码中,而是在 CLI 中通过运行时标志动态分配它们。

3. 总结

在本文中,我们深入了解了 Deno,并了解了它和 Node.js 之间的区别。我们还了解了升级和安装 Deno 的过程,并进一步了解了最新版本的 Deno 中附带的新功能和改进。对于正在考虑在项目中使用 Deno 的开发人员而言,这些信息应该会非常有用。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签