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 应用。

相关推荐
特别橙的橙汁17 小时前
Node.js 调用可执行文件时的 stdout 缓冲区问题
前端·node.js·swift
alamhubb17 小时前
反感pnpm的全链路污染?可以了解下这个对原项目零侵入,零修改完全兼容npm的monorepo工具
前端·javascript·node.js
程序员agions20 小时前
Node.js 爬虫实战指南(三):分布式爬虫架构,让你的爬虫飞起来
分布式·爬虫·node.js
鲨莎分不晴21 小时前
PM2 是什么?一篇讲清 Node.js 进程管理器的文章
node.js
程序员agions21 小时前
Node.js 爬虫实战指南(四):反反爬策略大全,和网站斗智斗勇
爬虫·node.js
程序员爱钓鱼1 天前
Node.js 编程实战:博客系统 —— 数据库设计
前端·后端·node.js
程序员agions1 天前
Node.js 爬虫实战指南(二):动态页面爬取,Puppeteer 大显身手
爬虫·node.js
Direction_Wind1 天前
抖音视频下载,直播间监控,直播间发言采集,最新加密算法
python·node.js
奶糖的次元空间2 天前
带你用 Javascript 生成器玩转「会暂停」的函数
node.js
Hilaku2 天前
我是如何用一行 JS 代码,让你的浏览器内存瞬间崩溃的?
前端·javascript·node.js