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 兼容性方面的几个问题。以下是一些亮点:
cp.execFile
正确验证timeout
参数crypto
模块支持aes256
算法fs/promises
支持cp()
http2.connect
现已支持 ALPN 协议,提升了与grpc-js
包的兼容性process.ppid
和process.umask
现已支持util.callbackify
与 Node 匹配,从而实现fs-extra
包兼容性
Deno
API 变更
此版本为 Deno
API 带来了一些变更
Deno.ConnectTlsOptions
现在支持cert
和key
属性,以更好地与 Deno 中的其他“连接”API 对齐;这使得certChain
和privateKey
属性被废弃。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 包注册表吗?
我们正在征集反馈。加入等候名单。