大家好,我是农村程序员,独立开发者,行业观察员,前端之虎陈随易。
我会在这里分享关于 独立开发、编程技术、思考感悟 等内容,欢迎关注。
- 个人网站 1️⃣:https://chensuiyi.me
- 个人网站 2️⃣:https://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 选项了。
详细更新内容,请前往地址:https://github.com/denoland/deno/releases/tag/v2.4.0
