跳到主要内容
Deno 2.4 发布,带来 deno bundle、bytes/text 导入、稳定的 OTel 等功能
了解更多

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 fmt` 和 `deno lint`。今天我们很高兴能为 Deno 工具链添加另一个开发者工具:`deno compile`。

`deno compile` 为 Deno 所做的,就像 `nexe` 或 `pkg` 为 Node 所做的那样:从您的 JavaScript 或 TypeScript 源代码创建独立、自包含的二进制文件。这是 Deno 问题追踪器上获得最多赞的问题。

它这样工作:

$ deno compile --unstable https://deno.land/std@0.79.0/http/file_server.ts
Check https://deno.land/std@0.79.0/http/file_server.ts
Bundle https://deno.land/std@0.79.0/http/file_server.ts
Compile https://deno.land/std@0.79.0/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 Workers 目前不支持。此功能的跟踪问题是 #8654
  • 您不能使用动态导入来动态包含代码。此功能的跟踪问题是 #8655
  • 目前无法自定义 V8 标志和沙箱权限。此功能的跟踪问题是 #8656

未来计划

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

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

由于目前二进制文件的打包方式,二进制文件中包含了很多不必要的代码。通过初步测试,我们确定在剥离这些不必要的代码后,最终二进制文件的大小可以减少约 60%(至约 20MB)。这方面的工作正在进行中(例如在 #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 开始,您可以通过运行 `deno upgrade --canary` 切换到 Canary 渠道并下载最新的 Canary 版本。您可以使用 `deno upgrade --canary --version 5eedcb6b8d471e487179ac66d7da9038279884df` 跳转到特定的提交哈希值。

警告:在 Canary 版本之间跳转或降级到稳定版可能会损坏您的 `DENO_DIR`。

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

`aarch64-apple-darwin` 构建在 Canary 版本中尚不支持。

Mac Arm64 实验性支持

使用搭载 M1 处理器的新款 Apple 电脑的用户将能够原生运行 Deno。我们在发布 zip 文件中将此目标称为 LLVM 目标三元组 `aarch64-apple-darwin`。

此目标仍被认为是实验性的,因为它使用 Rust nightly 构建(我们通常使用 Rust stable),并且我们尚未有自动化 CI 流程来构建和测试此目标。尽管如此,Deno 在 M1 上完全通过了测试套件,因此我们相对有信心它会提供流畅的体验。

`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 找到。