大家好,我是农村程序员,独立开发者,行业观察员,前端之虎陈随易。
我会在这里分享关于 独立开发
、编程技术
、思考感悟
等内容,欢迎关注。
- 个人网站 1️⃣:chensuiyi.me
- 个人网站 2️⃣:me.yicode.tech
- 技术群,搞钱群,闲聊群,自驾群,想入群的在我个人网站联系我。
如果你觉得本文有用,一键三连 (点赞
、评论
、转发
),就是对我最大的支持~
往期文章:
请大家注意,这是我专门写技术资讯,行业热点的公众号,原来的公众号 陈随易
主要写一些独立开发,个人思考之类的。
那么话不多说,分享一下 Deno v2.4 版本都更新了什么内容。
支持在 bundle 和 compile 中导入 text 和 bytes
也就是支持以下 2 个写法:
import otherBytes from './other.ts' with { type: 'bytes' };
import otherText from './other.ts' with { type: 'text' };
这是现代 Web 标准语法,Deno 正在进一步与标准融合。
增强对 tsconfig 文件的检查
Deno 的类型检查工具 (deno check
) 对 TypeScript 的 tsconfig.json
配置文件的支持有限,尤其是对于一些复杂的项目结构 (例如使用了项目引用 references、继承配置 extends、指定包含/排除文件的 include/exclude 等字段) 不完全兼容。
这导致:
- 某些使用高级 tsconfig 特性的 TypeScript 项目在 Deno 下无法正确进行类型检查。
- 用户无法充分利用 TypeScript 的项目组织和配置能力。
- 某些必须依赖这些字段的第三方项目或 monorepo 工程无法顺利迁移或在 Deno 下开发。
本次更新,解决了 Deno 在类型检查时对 tsconfig 关键字段支持不全的问题,极大提升了 Deno 对复杂 TypeScript 项目的兼容性和用户体验,使其可以像 tsc 一样,支持项目引用、配置继承、文件包含/排除等高级功能。
deno run 命令添加了--coverage 参数
本次更新为 deno run
命令添加了 --coverage
标志。
当指定此标志时,它将在指定的目录中生成覆盖率配置文件 (默认为coverage
)。
覆盖率目录也可以通过环境变量 DENO_COVERAGE_DIR
指定。
给 --unstable-sloppy-imports 提供别名 --sloppy-imports
看了这个 PR 下的讨论,说实话挺奇怪的,也就是说 --unstable-sloppy-imports
等于 --sloppy-imports
。
有人在该 PR 下评论:确定这不是在搞破坏?
为什么要让一个不稳定的参数提供一个看起来就是稳定的别名?嗯...确实奇怪。
deno serve 支持 onListen 回调函数
用法如下:
export default {
onListen: () => {
/* call me maybe */
},
fetch: () => new Response()
};
有哪些应用场景呢?
- 知道选择了哪个端口 (当使用 --port 0 时很有用)
- 动态设置 --location 以允许在自身上使用 fetch()
- 监听后设置
- 等等
支持。xml, 。svg 和。mustache 文件的格式化
本次更新,deno fmt
命令支持对 .xml
,.svg
和 .mustache
文件的格式化。
删除 UTF-8 BOM 而不是保留它
本次更新,deno fmt
命令将会默认移除文件中的 utf-8 bom
。
添加 fs.glob、fs.globSync、fs.promises.glob
这是 Nodejs 在 Bun 的刺激下新增的函数,而当 Nodejs 带来这些函数后,Bun 和 Deno 又要增加这些函数的兼容性。
这可真是七伤拳啊,不过谁叫 Nodejs 如今依旧是老大呢。
稳定 OpenTelemetry 支持
简单来说,OpenTelemetry 帮助开发者和运维团队更方便地获取程序在运行时的各种观测数据,从而更好地分析系统健康状况、性能瓶颈和故障原因。
向 Deno.Command 添加分离选项
Node.js 可以通过 setsid()
在分离模式下运行子进程,但 Deno 似乎缺少这个功能
本次更新允许子进程在父进程退出后继续运行的能力,类似于 Node.js 中已有的功能。
使用 detached
参数设置为 true
即可。
支持在 Windows 上监听 ctrl+close
什么是 ctrl + close
呢?请注意,不是 ctrl + c
的全拼,而是按住 ctrl 的同时,用鼠标左键点击窗口的关闭按钮。
本次更新,deno 支持这个操作了。
使用工作区解析器解析主模块
当用户在包含 deno.json
配置文件的工作区中运行模块时,之前 Deno 不会使用工作区解析器 (workspace resolver
) 来解析主入口模块,这可能导致导入映射 (import maps
) 和其他工作区配置不被正确应用于主模块。
这个改进确保了当使用 deno run
命令时,主模块也会通过工作区解析器进行解析,使得工作区配置 (如导入映射、JSX 配置等) 能够正确地应用于入口模块,提供了更一致的模块解析行为。
这对于依赖工作区配置的项目来说是一个重要的改进,使得模块解析行为更加一致和可预测。
举个例子:
{
"imports": { "foo.ts": "./bar.ts" }
}
假设你有一个名为 foo.ts
的文件,之前 deno run foo.ts
会运行 ./foo.ts
,本次更新后,则会运行 ./bar.ts
。
Deno.execPath() 不再需要 --allow-read 权限
简而言之就是,老是设置权限太麻烦了,干脆不要了。
使 setImmediate 和 clearImmediate 成为全局变量
这 2 个方法是 js 标准,成为全局变量理所当然。
使 Buffer 和 global 可用作全局变量
同上。
添加 deno update 子命令
只是为了节省几个字符,因为它是 deno outdated --update
的别名。
好吧,我以为 Deno 要学 Bun 做包管理更新呢。
添加 DENO_AUTO_SERVE 环境变量
本次更新添加了 DENO_AUTO_SERVE
环境变量,当指定该变量时,如果入口点满足 Deno.ServeDefaultExport
接口,deno 的运行行为将类似于 deno serve
。
添加 DENO_COMPAT 环境变量
设置 DENO_COMPAT
环境变量后,可启用以下几个功能:
- --unstable-bare-node-builtins
- --unstable-detect-cjs
- --unstable-sloppy-imports
稳定 --allow-net 子域名通配符
deno run --unstable-subdomain-wildcards --allow-net=*.github.com main.ts
# 👇
deno run --allow-net=*.github.com main.ts
子域名通配符已经稳定,可以不要 --unstable-subdomain-wildcards
选项了。
详细更新内容,请前往地址:github.com/denoland/de…