
Deno 2.6 版本发布,带来了对标 npx 的 dx 工具,不仅让你更方便地运行 npm 包,还引入了更细粒度的权限控制、Go 语言重写的类型检查器以及更强的 Node.js 兼容性。
dx:不仅是 Deno 版的 npx
如果你是 Node.js 开发者,你一定熟悉 npx。现在,Deno 也有了自己的 npx。
在 Deno 2.6 中,官方引入了一个名为 dx 的新工具。它的定位非常明确:成为 npx 的等价替代品,让你便捷地运行 npm 和 JSR 包中的二进制文件。
以往在 Deno 中运行一个 npm 包,你可能需要敲很长的命令。现在,体验和 Node.js 几乎一致:
go
# 使用 dx 运行 cowsay
dx cowsay "Hello, Deno!"
# 输出:
# ______________
# < Hello, Deno! >
# --------------
# \ ^__^
# \ (oo)\_______
# (__)\ )\/\
# ||----w |
# || ||
虽然 dx 用起来像 npx,但它骨子里流淌着 Deno 的基因 ------ 安全优先。
dx 与 npx 的区别
-
默认权限与提示 :
dx默认使用--allow-all权限运行(为了兼容性),但在下载包之前,它会主动询问你。这避免了你在不知情的情况下下载并运行了恶意代码。 -
生命周期脚本 :如果包里包含
postinstall等脚本,dx也会在征得你同意后自动运行,确保工具能正常工作。 -
默认源 :默认从
npm:加载包,除非你另行指定。 -
本地文件限制 :
dx不能用来运行本地文件,它专为运行包而生。
这意味着,你既能享受到 npx 的便捷(不用安装就能跑工具),又能获得 Deno 强大的安全模型保护。
安全再升级:deno audit 与细粒度权限
安全性一直是 Deno 的杀手锏。在 2.6 版本中,Deno 进一步收紧了安全防线。
1. deno audit:内置的漏洞扫描
供应链攻击是当今前端开发最大的隐患之一。Deno 2.6 新增了 deno audit 子命令。
它不仅会扫描 GitHub CVE 数据库,还能通过 --socket 参数集成 Socket.dev 的数据,为你提供一份详尽的依赖安全报告。
go
$ deno audit --socket
# 输出示例:
# Found 1 alerts across 1 packages
# Severity: 0 low, 0 medium, 0 high, 1 critical
这意味着你不再需要配置复杂的第三方工具,直接在 CI/CD 流程中加入 deno audit,就能拦截包含已知漏洞的代码。
2. 更"懂事"的权限控制
以前,Deno 的权限要么全给,要么全不给,或者报一个生硬的 NotCapable 错误。
2.6 版本引入了 --ignore-read 和 --ignore-env 标志。这允许你"假装"没有读取某些文件或环境变量的权限,而不是直接报错。
-
场景 :有些库会尝试读取
/etc/passwd或者一堆无关的环境变量,读不到就崩了。 -
现在:使用新标志,Deno 会告诉这个库"文件不存在"或"变量未定义",让程序能优雅降级继续运行,而不需要你被迫开启危险的权限。
性能飞跃:Go 语言重写的类型检查
Deno 团队一直在致力于让开发体验更快。这一次,他们祭出了大招:tsgo。
这是一个用 Go 语言重写的实验性 TypeScript 类型检查器。相比之前的实现,它的速度有了质的飞跃。
你可以通过 --unstable-tsgo 标志来尝鲜:
go
deno check --unstable-tsgo main.ts
据官方测试,内部项目在使用 tsgo 后,类型检查速度提升了 2 倍。对于大型项目来说,这节省下来的等待时间是巨大的。
Node.js 兼容性:更无感的迁移体验
Deno 对 Node.js 的兼容性已经非常成熟,但在 2.6 版本中,这种兼容性变得更加"无感"。
1. @types/node 默认内置
这是一个极大的 DX(开发者体验)提升!以前在 Deno 中写 Node 风格代码,你经常需要手动引入 @types/node 才能获得代码提示。
现在,Deno 默认包含了 @types/node 类型声明。
go
import { readFile } from "node:fs/promises";
// ✅ 直接拥有完整的类型提示,无需任何额外配置
const data = await readFile("./file.txt", "utf-8");
2. CommonJS 支持 --require
为了配合很多老旧的 CommonJS 模块预加载模式,Deno 2.6 增加了 --require 标志:
go
deno run --require ./setup.cjs main.ts
这让 Deno 能够运行更多依赖特定启动逻辑的 Node.js 应用。