Deno 2.6 正式发布:官方推出 dx 工具,剑指 Node.js npx?

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 的区别

  1. 默认权限与提示dx 默认使用 --allow-all 权限运行(为了兼容性),但在下载包之前,它会主动询问你。这避免了你在不知情的情况下下载并运行了恶意代码。

  2. 生命周期脚本 :如果包里包含 postinstall 等脚本,dx 也会在征得你同意后自动运行,确保工具能正常工作。

  3. 默认源 :默认从 npm: 加载包,除非你另行指定。

  4. 本地文件限制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 应用。

相关推荐
hoLzwEge2 天前
pnpm vs npm:新一代包管理器的范式革命
前端框架·node.js
麻辣凉茶2 天前
给阿嬤一封来自云端的信(上)
前端·node.js
codingWhat3 天前
能效平台设计方案(打通gitlab和飞书)
后端·node.js·koa
见过夏天4 天前
Node.js 常用命令全攻略
node.js
前端双越老师5 天前
我从 0 开发的 AI Agent 智语项目发布了
前端·node.js·agent
kyriewen5 天前
2026 年了,还在用 Node.js?Bun 迁移实战:20 分钟搞定,附踩坑记录
前端·javascript·node.js
donecoding6 天前
3 条命令搞定闭环 Monorepo:Lerna 版本管理 + 拓扑构建 + 自定义分发
前端·前端框架·node.js
Flynt7 天前
npm v12 来了:allowScripts 默认关闭,我的项目差点跑不起来
安全·npm·node.js
叫我Paul就好8 天前
尝试 Node 搭建后端-开发框架
node.js
风止何安啊9 天前
网课倍速痛点解决:一套前端代码实现自由控速播放器
前端·javascript·node.js