3 月 28 日,Deno 宣布 1.42 版本正式推出。Deno 的愿景是简化编程,其中一个重要方面就是管理依赖关系。虽然 npm 已发展成为最成功的开源注册表,但使用和发布模块却变得越来越复杂。
基于 npm 的成功,JSR 提供了一个现代化的、TypeScript 优先且跨平台兼容的注册表,并完全集成到 Deno 中。
Deno v1.42 通过 deno publish 和 deno add 子命令提供更强大的依赖关系管理,可以从 JSR 和 npm 发布和安装模块。最重要的是,此版本提供了改进的 Node/npm 兼容性、多项 LSP 改进、更快的启动时间(以及其他性能优势)等等。
如果您已经安装了 Deno,请在终端中使用 deno upgrade 命令升级到版本 1.42。如果您尚未安装 Deno,您可以使用以下命令之一或许多其他方式安装它。
以下是 Deno 1.42 新增功能的概述。
JSR、 deno publish 和 deno add
JSR 是现代 JavaScript 和 TypeScript 包的开源注册表。了解我们为何构建 JSR,使用 JSR 绝对是一种乐趣。它消除了分发 TypeScript 和 JavaScript 的所有麻烦。
在 1.42 中,Deno 添加了对 JSR 的一流支持。这意味着无需任何额外的工具,您就可以使用模块并将其发布到 JSR。
有两个新的子命令。首先是 deno add 。它的工作方式与 npm add 类似,但默认为 JSR 包。例如,如果您想使用 JSR 中的 @std/assert ,您只需运行
这将添加一个导入映射条目,使您可以轻松导入代码
请注意, deno add 还支持添加带有 npm: 前缀的 npm 包。
对于模块作者可以使用 deno publish 执行您所期望的操作,它将发布到 JSR。JSR 也完全融入到 Deno 的 LSP 和 VS Code 扩展中。即使使用 TypeScript,也希望 go-to-definition 能够正常工作。 Intellisense 对于 JSR 包来说应该工作得很好。
Node.js 和 npm 兼容性
此版本中进行了大量改进,使 Deno 与 Node.js 更加兼容;以及与 npm 兼容性相关的多项改进。此外,设置 node_modules/ 目录的性能也得到了改进 - 您可以在 Deno v1.42 中看到高达 1.7 倍的速度提升。
deno task
对于任何以 #!/usr/bin/env -S 开头的 shebang,跨平台 shebang 支持已在 deno task 中实现。给定一个 script.ts 文件和 deno.json :
现在即使在 Windows 计算机上也可以运行此任务。
退出状态变量
shell 现在支持使用 $? 来获取上次运行命令的退出代码:
改进的重定向支持
现在实现了输入重定向和更多文件描述符重定向:
任务描述
如果您使用的是 JSONC 文件,您现在可以使用注释向任务添加描述:
deno lint --fix
该基础设施已实现在命令行上自动修复 lint 规则并通过编辑器中的快速修复。
例如,给出以下代码:
deno lint 现在输出以下内容:
请注意文本 (1 fixable via --fix) 。让我们尝试一下:
目前,这仅适用于三个 lint 规则,但该列表会随着时间的推移而增长。
类型检查
以前,如果您使用 --check 标志运行 deno run ,当遇到静态不可分析的动态导入或启动工作线程时,Deno 可能会在执行过程中键入 check。
此功能带来了很大的维护负担,给 JSR 带来了一些挑战,并产生了不良行为,即可能在执行过程中使正在运行的应用程序失败。因此,在初始类型检查之后不再进行类型检查(强调: deno run --check main.ts 在执行任何模块之前仍然进行类型检查)。
如果需要,建议使用 deno check 子命令来键入检查这些模块。
deno install 更新
deno install 允许您轻松安装和分发可执行代码。
虽然此命令很有用,但许多用户希望它能够在项目本地“安装”依赖项 - 就像之前介绍的 deno add 一样。
为了更好地符合预期,Deno 2 中的 deno install 将更改为在项目本地安装脚本。也就是说, deno install 将是 deno add 的别名。-g / --global 标志仍然支持当前行为,以告诉 Deno 您想要全局安装脚本。
如果您忽略它,Deno 现在会警告您并建议使用 -g / --global 标志。
语言服务器改进
从 v1.37 开始,我们的 LSP 支持 npm: 说明符的补全。在 v1.42 中,我们不仅添加了对 jsr: 说明符的支持,还添加了包名称和版本的补全。
其他改进和修复
在 JSR 导入悬停文本中包含注册表 url
不要警告本地文件从 .js 重定向到 .d.ts 文件
不要对供应的远程模块应用符号重命名
对包说明符导入映射键应用尾部斜杠扩展
表现
此版本全面提升了性能,其中最值得注意的是:
更快的启动时间:Linux 上的启动时间缩短了 10%。现在,引导程序初始化会在快照期间预热并减少内存分配。
更高效的 setTimeout 和 setInterval :计时器进行了重大重写。创建一百万个计时器大约需要 1.4 秒,而 Deno 1.41 中需要 5.9 秒,同时内存使用量也减少了 70%。
Fresh 2.0 即将到来
我们的下一个主要 Fresh 版本将更加简单,具有更可组合的、类似 Express 的 API。
领取专属 10元无门槛券
私享最新 技术干货