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

相关推荐
Gogo81615 小时前
Node.js 生产环境避坑指南:从 PM2“麦当劳理论”到日志全链路治理
node.js·日志·pm2
San30.15 小时前
从零到一:开启 LangChain 的 AI 工程化之旅
人工智能·langchain·node.js
风止何安啊18 小时前
Steam玩累了?那用 Node.js 写个小游戏:手把手玩懂 JS 运行环境
前端·javascript·node.js
fighting不想说话18 小时前
NodeJs:前端工程化推手
node.js
sugar椰子皮1 天前
【node源码-2】Node.js 启动流程
爬虫·node.js
晚星star1 天前
《深入浅出 Node.js》第四章:异步编程 详细总结
前端·node.js
大布布将军1 天前
⚡️ 性能加速器:利用 Redis 实现接口高性能缓存
前端·数据库·经验分享·redis·程序人生·缓存·node.js
幺零九零零1 天前
全栈程序员-前端第一节-npm 是什么?
前端·npm·node.js
晚星star2 天前
2.2 Node的模块实现
前端·node.js