跳至主要内容
Deno 2 终于来了 🎉️
了解更多

Deno 1.6 版本说明

今天我们发布了 Deno 1.6.0。此版本包含一些主要功能和许多错误修复。以下是一些亮点

如果您已经安装了 Deno,可以通过运行 deno upgrade 升级到 1.6。如果您是第一次安装 Deno,可以使用下面列出的方法之一

# Using Shell (macOS and Linux):
curl -fsSL https://deno.land/x/install/install.sh | sh

# Using PowerShell (Windows):
iwr https://deno.land/x/install/install.ps1 -useb | iex

# Using homebrew (MacOS):
brew install deno

# Using Scoop (Windows):
scoop install deno

# Using Chocolatey (Windows):
choco install deno

# Build from source using cargo
cargo install deno

新功能和更改

deno compile: 自包含的、独立的二进制文件

我们的目标是在 Deno CLI 中提供一系列有用的工具。例如 deno fmtdeno lint。今天我们很高兴在 Deno 工具链中添加另一个开发工具:deno compile

deno compile 对 Deno 做的事情就像 nexepkg 对 Node 做的事情一样:从您的 JavaScript 或 TypeScript 源代码创建独立的、自包含的二进制文件。这是 Deno 问题跟踪器中投票数最高的单一问题。

它是这样工作的

$ deno compile --unstable https://deno.land/[email protected]/http/file_server.ts
Check https://deno.land/[email protected]/http/file_server.ts
Bundle https://deno.land/[email protected]/http/file_server.ts
Compile https://deno.land/[email protected]/http/file_server.ts
Emit file_server

$ ./file_server
HTTP server listening on http://0.0.0.0:4507/

与 Deno 中的所有新功能一样,deno compile 需要 --unstable 标志来表示短期内界面可能会发生重大更改。如果您有任何反馈,请在 Deno discord 中发表评论,或在 Deno 问题跟踪器 上创建功能请求问题。

有关实现细节,请参阅 #8539.

当前限制

目前,使用 deno compile 时可能会遇到几个限制。如果您有这些用例中的一个,请在相应的跟踪问题中回复。

  • Web Worker 目前不受支持。此功能的跟踪问题是 #8654.
  • 您不能使用动态导入动态包含代码。此功能的跟踪问题是 #8655.
  • 目前无法自定义 V8 标志和沙盒权限。此功能的跟踪问题是 #8656.

未来计划

您可能已经注意到,与其他为 JS 创建独立、自包含二进制文件的工具(如 pkg)不同,deno compile 没有可以用于捆绑资产的虚拟文件系统。我们希望随着未来 TC39 提案(如 import assertionsasset references)的出现,对虚拟文件系统的需求将消失,因为资产然后可以直接在 JS 模块图中表达。

目前,deno compile 子命令不支持跨平台编译。必须在特定平台上为该平台进行编译。如果有需求,我们希望在编译时添加使用 --target 标志为不同架构交叉编译的能力。此功能的跟踪问题是 #8567.

由于二进制文件打包方式的限制,二进制文件中包含了大量不必要的代码。从初步测试中,我们发现通过剥离这些不必要的代码,我们可以将最终的二进制文件大小减少约 60%(降至约 20 MB)。目前正在进行这方面的工作(例如,在 #8640 中)。

内置 Deno 语言服务器

Deno 1.6 附带了一个新的 deno lsp 子命令,该命令提供了一个实现 语言服务器协议 的语言服务器。LSP 允许编辑器与 Deno 通信以提供各种高级功能,例如代码补全、代码检查和悬停提示。

新的 deno lsp 子命令尚未功能完整,但它实现了许多主要的 LSP 功能

  • 代码补全
  • 悬停提示
  • 转到定义
  • 转到引用
  • deno fmt 集成
  • deno lint 集成

Deno VSCode 扩展 尚未支持 deno lsp。它仍然比新生的 deno lsp 提供的功能更丰富。但是,我们预计这种情况将在未来几周内发生变化,因为 LSP 将变得更加成熟。目前,如果您想在 VSCode 中尝试 deno lsp,则必须安装 VSCode Deno Canary。请确保在尝试使用此新扩展之前已安装 Deno 1.6。并且确保禁用旧版本的扩展,否则诊断信息可能会重复。

要跟踪开发进度,请关注 问题 #8643。当 #8643 完成时,我们将发布一个使用 deno lsp 的新版本 vscode-deno。

迁移到更严格的类型检查已完成

在 Deno 1.4 中,我们在 --unstable 中引入了更严格的 TypeScript 类型检查,这使我们能够将大量代码从 JS 移动到 Rust(从而在 TypeScript 转换和捆绑方面实现了巨大的性能提升)。在 Deno 1.5 中,这些更严格的类型检查默认情况下对每个人都启用,并使用 "isolatedModules": false TypeScript 编译器选项进行选择退出。

在此版本中,此覆盖已删除。所有 TypeScript 代码现在都使用 "isolatedModules": true 运行。

有关此的更多详细信息,请参阅 Deno 1.5 博客文章.

TypeScript 4.1

Deno 1.6 附带了最新稳定版的 TypeScript。

有关 Typescript 4.1 中新功能的更多信息,请参阅 发布 TypeScript 4.1

Canary 频道

对于希望在下一个稳定版 Deno 发布之前测试错误修复和功能的资深用户,我们现在提供了一个canary更新通道。Canary 版本每天发布多次,每次 Deno 仓库 master 分支 上提交一次代码就会发布一次。

您可以通过版本末尾的 7 个字符的提交哈希值以及deno --version输出中的canary字符串来识别这些版本。

从 Deno 1.6 开始,您可以切换到 canary 通道,并通过运行deno upgrade --canary来下载最新的 canary 版本。您可以使用deno upgrade --canary --version 5eedcb6b8d471e487179ac66d7da9038279884df跳转到特定的提交哈希值。

警告:在 canary 版本之间切换或降级到稳定版本可能会损坏您的DENO_DIR

Canary 版本的 zip 文件可以从 https://dl.deno.land 下载。

aarch64-apple-darwin 构建目前在 canary 中尚不支持。

Mac Arm64 的实验性支持

搭载 M1 处理器的新款苹果电脑用户将能够原生运行 Deno。我们在发布的 zip 文件中用 LLVM 目标三元组aarch64-apple-darwin来指代这个目标。

此目标仍被视为实验性,因为它使用 Rust nightly(我们通常使用 Rust stable)构建,而且我们还没有自动化的 CI 流程来构建和测试此目标。话虽如此,M1 上的 Deno 已经完全通过了测试套件,因此我们有理由相信它将带来流畅的体验。

rusty_v8 v0.14.0 的二进制文件也针对 M1 提供,但存在相同的注意事项。

std/bytes 的更改

作为 标准库工作组 的工作成果的一部分,std/bytes 模块经历了重大改革。这是稳定 Deno 标准库的第一步。

大多数 API 已重命名,以更好地与Array 上提供的 API 保持一致。

  • copyBytes -> copy
  • equal -> equals
  • findIndex -> indexOf
  • findLastIndex -> lastIndexOf
  • hasPrefix -> startsWith
  • hasSuffix -> endsWith

完整的发布说明,包括错误修复,可以在 https://github.com/denoland/deno/releases/tag/v1.6.0 找到。