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

Deno 1.41:更小的 deno compile 二进制文件

Deno 的目标是在尽可能多的环境中简化编程。在 1.41 版本中,我们很高兴地宣布了一些改进,这些改进扩大了 Deno 的使用方式和范围:我们已将 deno compile 生成的二进制文件大小大致减半,并新增了官方的 Linux ARM 64 构建版本。此外,我们还持续改进了 Node.js 兼容性、LSP(包含更好的自动补全功能)以及 Deno API。

如果您已经安装了 Deno,请在终端中使用以下命令升级到 1.41 版本

deno upgrade

如果您尚未安装 Deno,可以使用以下命令之一进行安装,或者通过其他多种方式安装。

MacOS / Linux 安装

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

Windows 安装

irm https://deno.land/install.ps1 | iex

以下是 Deno 1.41 新功能概述

更小的 deno compile 二进制文件

v1.6 版本以来,deno compile 已支持将您的项目编译成单个可执行二进制文件,这对于以下方面非常有用:

  • 在所有主流平台上分发和执行二进制文件,无需安装 Deno 或依赖项
  • 将资源打包到可执行文件中以增强可移植性
  • 简化部署
  • 实现更快的启动时间

此后,我们持续改进 deno compile,增加了对 Web Workers 和动态导入的支持,以及对 npm 包的支持

我们很高兴地宣布,此版本为 deno compile 二进制文件带来了更轻量级的构建,使生成的二进制文件缩小了多达 50%!

在 v1.40 中,一个“Hello world”程序在 Mac ARM 上编译后为 116MB 的二进制文件

$ echo "console.log('Hello world');" > hello_world.ts

$ deno compile hello_world.ts
Check file:///Users/ib/dev/deno/hello_world.ts
Compile file:///Users/ib/dev/deno/hello_world.ts to hello_world

$ ls -lah hello_world
116M Feb 22 15:59 hello_world

在 v1.41 中,相同程序的大小减少到 58MB

$ deno upgrade
Looking up latest version
Found latest version 1.41.0

$ deno compile hello_world.ts
Check file:///Users/ib/dev/deno/hello_world.ts
Compile file:///Users/ib/dev/deno/hello_world.ts to hello_world

$ ls -lah hello_world
58M Feb 22 16:02 hello_world

我们计划在未来进一步减小生成的二进制文件大小,并允许您编译只包含所需功能的自定义 Deno 构建版本。

Linux ARM64 支持

官方 Linux ARM64 构建版本是 Deno 社区最常请求的功能之一。我们很高兴地宣布,它们现已在 Deno 1.41 中提供。

官方 ARM64 二进制文件可在 Deno 发布页面找到。请注意,此更新意味着我们的官方 Deno Docker 镜像现在也支持 ARM64。

我们要感谢 Luke Channings,他在过去 3 年中为社区提供了 Linux ARM64 构建版本。

ARM64 Canary 构建版本

除了稳定的 Deno 版本之外,您还可以安装“canary”构建版本,它对于测试最新功能和错误修复非常有用,使用以下命令:

deno upgrade --canary

我们的 Canary 构建版本会随着 main 分支的每次提交每天发布多次

从 Deno 1.41 开始,Linux 和 Mac ARM64 均可使用 Canary 构建版本。

Node.js 兼容性更新

我们在 Deno 1.41 中修复了 Node.js 兼容性方面的几个问题。以下是一些亮点:

Deno API 变更

此版本为 Deno API 带来了一些变更

  • Deno.ConnectTlsOptions 现在支持 certkey 属性,以更好地与 Deno 中的其他“连接”API 对齐;这使得 certChainprivateKey 属性被废弃。

  • Deno.FsFile.isTerminal()Deno.FsFile.setRaw() 现已可用,以更好地支持终端 I/O。请注意,这些方法仅在打开的文件是 TTY 时才有效。

  • Deno.FsFile.lock()Deno.FsFile.unlock() 现已可用,以更好地支持文件锁定。同步对应方法 Deno.FsFile.lockSync()Deno.FsFile.unlockSync() 也已可用。

语言服务器改进

此版本带来了更好的自动补全触发器以及对 npm: 标识符更可靠的版本建议。

此外,LSP 中发现并修复了一个内存泄漏问题。内存泄漏发生在代码检查(linting)期间,其大小与文件数量和大小成正比。

感谢 Ian Bull 对 LSP 内部的详细分析和调查,这有助于找出问题所在。

感谢我们的贡献者!

没有我们社区的帮助,Deno 就无法发展壮大!无论是通过在我们的社区 Discord 服务器中回答问题,还是报告错误,我们都非常感谢您的支持。在此,我们要特别感谢以下对 Deno 1.41 做出贡献的人:Alessandro Cosentino, Dan Rose, Florian Schwalm, Jason Ford, Javier Hernández, John Spurlock, Lino Le Van, restlessronin, zhanghengxin, 林炳权。

您想加入 Deno 贡献者的行列吗?请在此处查看我们的贡献文档,期待下次在贡献者名单上看到您的名字。

信不信由你,上面列出的变更仍然未能涵盖 1.41 中所有改进的地方。您可以在 GitHub 上查看 Deno 1.41 中合并的完整拉取请求列表

感谢您关注我们的 1.41 版本发布,希望您喜欢使用 Deno 进行开发!

想尝试一个现代的 JavaScript 和 TypeScript 包注册表吗?

我们正在征集反馈。加入等候名单。