✅ 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")

相关推荐
兜小糖的小秃毛1 分钟前
两段文本比对,高亮出差异部分
linux·前端·javascript
佛系菜狗10 分钟前
element-ui、element-plus表单resetFields()无效的坑
前端·javascript·vue.js
爱的叹息31 分钟前
【前端】基于 Promise 的 HTTP 客户端工具Axios 详解
前端·网络·网络协议·http
遗憾随她而去.38 分钟前
从 0 开始认识 WebSocket:前端实时通信的利器!
前端·websocket·网络协议
老兵发新帖1 小时前
pnpm常见报错解决办法
前端
Sonetto19991 小时前
Nginx 反向代理,啥是“反向代理“啊,为啥叫“反向“代理?而不叫“正向”代理?它能干哈?
运维·前端·nginx
沐土Arvin1 小时前
理解npm的工作原理:优化你的项目依赖管理流程
开发语言·前端·javascript·设计模式·npm·node.js
好_快2 小时前
Lodash源码阅读-baseUniq
前端·javascript·源码阅读
不秃的开发媛2 小时前
前端技术Ajax入门
java·开发语言·前端
牧羊狼的狼2 小时前
React.memo 和 useMemo
前端·javascript·react.js