👇 今日要闻
打破信息壁垒,走近全球前端。Hello 大家好,我是林语冰。
Node、Deno 和 Bun 合称"JS 三大运行时",其中 Node 最古老,也最多"历史包袱"。
新生代运行时 Deno 和 Bun 都采用 Rust 追求极致性能,且内置了 Node 缺失的一体化工具。即便如此,Node 在云平台的市场占有率还是稳居榜首。
Zod 作者、同时也是 tRPC 的作者发现,相比 Deno 和 Bun,Node 真正的痛点不是性能,更不是生态,而是缺少官方的一体化工具。
于是,它创造了 nub,一个采用 Rust 语言实现的 CLI 全家桶。

本期一起来看看 nub 如何为 Node 带来类似 Bun 内置的一体化工具,甚至性能还反超 Bun / pnpm 等流行工具。
👉 Node 真正的痛点
Node 之父创造 Node,是为了让 JS 在服务端也能运行,而非为 JS 开发者提供一条龙服务。
这成为了 Deno 和 Bun 等现代 JS 运行时的卖点,它们天然就支持运行 TS,内置单元测试运行器和包管理器等一体化工具集,以满足 JS 开发者的日常需求。

Node 的最大痛点其实不在性能,它的事件循环等底层机制主要使用 C艹 编写,原生性能并不会被 Rust 降维打击。
利用开发者的路径依赖,Node 的性能只要不沦落到慢如龟速,开发者一定程度上就能容忍,选择享受 Node 生态沉淀的庞大复利。
这就是为什么 Deno 和 Bun 始终未能在云平台上撼动 Node 的龙头地位,它们的产品定位是"下一代的 JS 运行时",它们的战略目标是试图取代 Node,所以它们不会强求百分百兼容 Node,但又不得不和 Node 抢占市场。
Zod 作者认为"取代 Node"是所谓"下一代运行时"的缺陷,它拥抱 Node,基于 Node 打造一体化工具,利用 Rust 的极致性能为 Node 插上翅膀。
应运而生的产品就是我们今天的主角:nub~
👉 Node 一体化工具
nub 是一个使用 Rust 实现的 CLI 命令行全家桶,它实现了开发者常用的功能,而且性能更好。
下列开发者常用的功能需求,以前要么通过 Node 有限支持,要么通过离散的第三方库手动组合集成,现在都直接可以通过 nub 一次性高效地支持:

nub 不是一个新型运行时,而是基于 Node 这个老牌运行时实现的一体化工具,它的目的是利用 Rust 为 Node 插上翅膀,改善用户的开发体验,而不是取代 Node。
Node 虽然有很多历史包袱,但受到 Deno 和 Bun 的冲击和启发,Node 如今也进化出了一大波现代功能,包括:
- 支持
--watch开发监视模式,无需安装nodemon等外部依赖 - 支持类型剥离,直接使用
node main.ts运行 TS 文件 - 支持
.env文件加载,无需安装dotenv等第三方模块
即便如此,相比 Deno 和 Bun,Node 的工具链还是不够全面,且性能不佳,比如:
- 虽然支持 TS,但只支持类型剥离,不进行编译时检查,JSX 和部分 TS 专属语法都不支持,用户实际开发还是依赖
tsx或tsc - 没有像 Deno 或 Bun 内置测试库,需要借助
vitest或jest等流行测试框架 - 和
pnpm不同,Node 自己和 npm 包管理器都无法管理 Node 的版本,用户需要借助nvm等社区工具,不同的操作系统需要开发者自己选择性兼容
这就是 nub 的用武之地,它允许你继续使用 Node 庞大的生态,同时又提供了一套使用 Rust 实现的一体化工具。
nub 只需要一行代码下载就开箱即用,然后你就可以纵享丝滑的开发体验:

👉 性能优势
nub 基于 Rust 和 Node 实现,因此性能和兼容性是它最大的亮点,甚至 pnpm 和 Bun 在基准测试中都被反超。
Nub vs Deno vs Bun
nub 几乎百分比兼容 Node,因为它是基于 Node 实现的一体化工具:

Nub vs Bun vs pnpm
nub 可以作为包管理器,它采用了 aube,一个基于 Rust 实现的包管理器,因此模块安装速度反超 Bun 和 pnpm:

Nub vs npm vs pnpm
nub 能以 Rust 的原生速度运行 package.json 中的 scripts 脚本,不会像 npm run 或 pnpm run 那样有明显的卡顿:

此外,nub 能直接执行 esbuild 等原生二进制文件,不会像 npx 那样冷启动延迟:

Nub vs tsx
nub 使用了尤雨溪公司的 oxc 转译器,能够转译 TS 专属语法,比如 Node 不支持的 enum 枚举等:

nub 和 npm、pnpm、Bun 之间的配置支持对照表大致如下:
| 配置 | npm | pnpm | bun | nub |
|---|---|---|---|---|
| overrides | ✅ | ❌ | ✅ | ✅ |
| catalog: | ❌ | ✅ | ✅ | ✅ |
| allowBuilds | ❌ | ✅ | ❌ | ✅ |
| trustedDependencies | ❌ | ❌ | ✅ | ✅ |
可以看到,nub 的配置支持最完备,全部支持。
👇 重点总结
作为被误解最深的编程语言,JS 一度被开发者视为"玩家语言",有人甚至发明了 Dart 语言试图取代 JS,但终究没有赢过 JS 的生态,"后 ES6 时代"的 JS 和 TS 也稳居 GitHub 的五常语言。
Deno 和 Bun 在 JS 服务端运行时的路上走得更远,它们在设计和实现上有诸多超越 Node 的天才之处,唯一的痛点是 Node 兼容性。

Zod 之父选择两手都要抓、两手都要硬,Node 的庞大生态和 Rust 的极致性能都要兼得,于是它创造了 nub,利用 Rust 为 Node 插上翅膀:
- 基于 Rust 的
aube包管理器,模块安装速度反超 Bun 和pnpm - 采用尤雨溪公司的
oxc编译,TS 和 JSX 支持比 Node 和tsx更棒 - 基于 Node 和 Rust 的 CLI 全家桶,兼容性比 Deno 和 Bun 更好
nun 是一个 Node 专属的 一体化工具,让你沿袭 Node 丰富生态的同时,纵享丝滑的开发体验。
👍 以上就是本期《前端日报》的全部内容了,如果读完对你有所帮助,可以按赞打卡、在看推荐或转发分享。
🙏 已经关注我的粉丝们,我们下期再见啦,掰掰~~

👇 参考文献:
- 🔗 Nub 官网 :nubjs.com
- 🔗 Nub 源码仓库 :github.com/nubjs/nub
- 🔗 Nub 官宣博客 :nubjs.com/blog/introd...