✅ 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

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

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

2 2.1 版本: github.com/denoland/de...

3 Wasm: webassembly.org

相关推荐
ji_shuke7 分钟前
远程排查 Web 系统问题:如何导出 HAR 文件协助定位
前端·问题排查
程序员爱钓鱼35 分钟前
Rust String 与 &str 详解:字符串所有权、借用与转换
前端·后端·rust
码农学院40 分钟前
GEO与SEO协同:从传统搜索到生成式搜索的平滑迁移路径
服务器·前端·python
To_OC8 小时前
LC 131 分割回文串:刚学回溯时,我连怎么切字符串都想不明白
javascript·算法·leetcode
咩咩啃树皮9 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
阳光是sunny9 小时前
LangGraph中的Reducer是什么
前端·人工智能·后端
触底反弹9 小时前
一文搞懂 Tailwind CSS 弹性布局:从原理到实战
前端·css·html
阳光是sunny9 小时前
从链到图:LangGraph 入门基础全解析
前端·人工智能·后端
To_OC10 小时前
LC 42 接雨水:暴力超时卡半天?前后缀数组一用就通了
javascript·算法·leetcode
小林ixn10 小时前
从 ??= 到 onKeyDown:一个 React 组件的“自我修养”
前端·javascript·react.js