✅ 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

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

[3] Wasm: webassembly.org

相关推荐
m0_748248772 小时前
【前端 Uniapp】使用Vant打造Uniapp项目(避坑版)
前端·uni-app
深海的鲸同学 luvi2 小时前
高德地图离线加载解决方案(内网部署)+本地地图瓦片加载
前端·javascript·html5
码字哥3 小时前
EasyExcel设置表头上面的那种大标题(前端传递来的大标题)
java·服务器·前端
GIS好难学5 小时前
《Vue进阶教程》第六课:computed()函数详解(上)
前端·javascript·vue.js
nyf_unknown5 小时前
(css)element中el-select下拉框整体样式修改
前端·css
m0_548514775 小时前
前端打印功能(vue +springboot)
前端·vue.js·spring boot
执键行天涯5 小时前
element-plus中的resetFields()方法
前端·javascript·vue.js
Days20505 小时前
uniapp小程序增加加载功能
开发语言·前端·javascript
喵喵酱仔__5 小时前
vue 给div增加title属性
前端·javascript·vue.js
dazhong20125 小时前
HTML前端开发-- Iconfont 矢量图库使用简介
前端·html·svg·矢量图·iconfont