✅ Deno 2.1 升级成为第一个长期支持发行版

作者:Deno 团队

译者:林语冰

资源:Deno 官方博客[1]

免责声明:活人翻译,略有删改,仅供粉丝参考!

00. 速览

Deno 团队官宣升级 2.1 版本[2],新版亮点如下:

  • LTS(长期支持版)
  • deno init --npm vite
  • deno compile 嵌入资源文件
  • deno task 优化
  • 支持一流的 Wasm(WebAssembly 类汇编语言)
  • Node 和 npm 兼容性优化
  • --allow-env 通配符
  • 优化排版和 lint
  • deno publish 覆写版本

01. 依赖管理

1.1 deno init

使用 npm create vite 是一种基于现有模板构建新项目的流行方案。

Deno 2.1 新增 deno init --npm 来启动新项目,类似与 npm init

1.2 deno outdated

Deno 2.1 新增 deno outdated 子命令来更新 JSR 和 npm 依赖,支持 --update--latest 等 flag:

注意,这个命令可以同时理解 deno.jsonpackage.json,并修改这两个文件。

默认情况下,它遵循配置文件中指定的语义化版本范围,但你可以使用 --latest flag 强制更新到最新版本。

1.3 deno publish

deno publish 现在支持 --set-version 来覆写 deno.json 中指定的模块版本:

02. LTS 发行版

Deno 每 6 周发布一个次版本更新,几乎每周发布一次补丁版。但是,过快的发布节奏使开发团队难以落地生产。

为了让团队更轻松地使用 Deno,Deno 2.1 成为 第一个 LTS 版本,即 Deno 2.1 分支会在接下来的六个月内获得重要的错误修复和性能改进。

03. 支持一流的 Wasm

Wasm[3] 是一个二进制编译目标,允许用其他语言写代码,并编译给浏览器。

Deno 2.1 简化了 Wasm 模块导入,更符合人体工程学,性能更棒。

以前手动加载 Wasm 模块需要指定 --allow-read--allow-net 权限:

Deno 能理解导出的 Wasm 模块,并检查它们的类型。

假设我们误用了了上述的 add() 函数:

04. deno compiler 嵌入资源文件

从 Deno 1.6 开始,deno compile 允许将项目编译为适用于主要平台的单个二进制可执行文件,无需安装 Deno 或依赖就能分发和执行。

deno compile 现在能够嵌入由编译程序读取的任意文件,使用 --include flag 指定要包含文件或目录:

然后你可以用与本地开发相同的方式读取它们:

请记住,你只能指定本地文件,不支持远程文件。

05. deno task

Deno 2.1 狠狠优化了 deno task,现在可以将任务编写为对象,通过 "description" 选项来添加描述信息:

5.1 任务依赖

Deno 任务现在可以具有依赖:

可以看到,运行 deno task serve 会先并行执行 build 等依赖任务,一旦全部成功完成,serve 任务就会被执行。

deno task 会处理依赖中的循环,并确保不会陷入死循环。

所谓"菱形依赖",指的是两个依赖项共享一个共同依赖,现在能被 Deno 正确理解,deno task 会确保多个其他任务依赖的任务能且仅能执行一次:

5.2 支持 workspace

通过添加 --filter--recursive flag,你现在可以使用 deno task 从 workspace 的所有或部分成员运行任务。

06. Node 和 npm 兼容性优化

6.1 更棒的 CJS 支持

Node 默认会将 .js 当做 CJS,除非最近的 package.json 指定了 "type": "esm"。Deno 则一直将所有文件视为 ESM。

为了更易运行或迁移现有代码库,Deno 现在会查找最近的 package.json 文件,且如果它们指定了 "type": "commonjs",Deno 会把文件当做 CJS:

CJS 模块的静态分析也优化了,很多时候无需 --allow-read 权限来执行 CJS 模块。

6.2 优化 Node 全局变量的支持

Deno 2.1 新增了 --unstable-node-globals flag,添加了以下的全局变量:

  • Buffer
  • global
  • setImmediate
  • clearImmediate

07. --allow-env 通配符

现在可以在 --allow-env-E flag 中指定后缀通配符,指定环境变量的访问"范围"。

为程序提供多个环境变量时,这些变量会按公共前缀分组,比如 DEV_ID 等。

在终端中指定这些变量可能很头大,因此 Deno 2.1 将其简化了:

这样,程序可以读写以 DEV_ 为前缀的所有环境变量。

我是大家的 林语冰 👨‍💻,欢迎持续 关注 我,随时了解海内外前端开发的最新情报。

谢谢的大家点赞、留言和友情转发,我们下期再见~👍

参考文献

1\] Deno 官方博客: [deno.com/blog/v2.1](https://link.juejin.cn?target=https%3A%2F%2Fdeno.com%2Fblog%2Fv2.1 "https://deno.com/blog/v2.1") \[2\] 2.1 版本: [github.com/denoland/de...](https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Fdenoland%2Fdeno%2Freleases%2Ftag%2Fv2.1.0 "https://github.com/denoland/deno/releases/tag/v2.1.0") \[3\] Wasm: [webassembly.org](https://link.juejin.cn?target=https%3A%2F%2Fwebassembly.org "https://webassembly.org")

相关推荐
老虎0627几秒前
JavaWeb前端(HTML,CSS具体案例)
前端·css·html
Mintopia6 分钟前
一个月速成 AI 工程师:从代码小白到智能工匠的修炼手册
前端·javascript·aigc
Mintopia10 分钟前
Next.js 全栈:接收和处理请求
前端·javascript·next.js
袁煦丞43 分钟前
2025.8.18实验室【代码跑酷指南】Jupyter Notebook程序员的魔法本:cpolar内网穿透实验室第622个成功挑战
前端·程序员·远程工作
Joker Zxc1 小时前
【前端基础】flex布局中使用`justify-content`后,最后一行的布局问题
前端·css
无奈何杨1 小时前
风控系统事件分析中心,关联关系、排行、时间分布
前端·后端
Moment1 小时前
nginx 如何配置防止慢速攻击 🤔🤔🤔
前端·后端·nginx
晓得迷路了1 小时前
栗子前端技术周刊第 94 期 - React Native 0.81、jQuery 4.0.0 RC1、Bun v1.2.20...
前端·javascript·react.js
江城开朗的豌豆1 小时前
React Native 实战心得
javascript