作者:
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.json
和 package.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