大家好,我是何三,独立开发者

14.7ms 跑完一个 npm run 脚本,442.7ms 才跑完的同行在旁边转圈圈——30 倍的差距,就发生在你每天写代码的那几秒等待里。

这个叫 Nub 的东西,上周刚发布就冲上了 Hacker News 首页和 GitHub Trending。作者 Colin 之前搞过 Zod——对,就是那个 TypeScript 类型校验神器 Zod。这次他换了个方向,用 Rust 写了一套完整的 Node.js 工具链。

不取代 Node,不搞新运行时,不整花活。就是把 npm runnpxnpm installnvm 这些你每天要用的东西,全部重写一遍。

用 Rust。

你说 Node.js 生态里工具链还少吗?npm、pnpm、yarn、bun、deno……光包管理器就有七八个,每个都说自己快。

但 Nub 的 benchmark 数据贴出来那一下,我还是愣了一下。

操作 Nub 竞品 快多少
nub run 14.7 ms pnpm run: 442.7 ms 30×
nubx 11 ms npx: 226 ms 19×
nub install 1,122 ms npm: 4,163 ms 3.7×
启动 TS 文件 tsx: 慢 2.9× 2.9×

14 毫秒什么概念?人眨一次眼要 300 到 400 毫秒。你还没眨完眼,Nub 已经把脚本跑完了。

这个数据我真的吹爆。

nub benchmark

Nub 不做新运行时。它站在 Node 的肩膀上用 Rust 加速。

原理其实不复杂——你每次敲 npm run dev,背后是 Node 先启动自己,再解析 package.json,再找 script,再 spawn 子进程。这一套下来三四百毫秒就没了。

Nub 的做法是:用 Rust 写了一个极薄的 CLI 层,直接接管这些"启动前的启动"动作。Rust 编译成原生二进制,没有 Node 启动开销,没有 JS 解释的等待。

说白了,就是你把车钥匙拧下去那一下,以前是发动机先预热三秒才走,现在是点火瞬间直接弹射起步。

而且它顺便把 TypeScript 支持、JSX、装饰器、自动加载 .env 文件这些破事全包了。装一个 Nub,相当于同时装了 tsx + dotenv-cli + nodemon + nvm + corepack

哦对了,它用的是 Oxc 做转译——就是那个同样用 Rust 写的 JavaScript 解析器。Rust 套 Rust,套娃式的快。

说到 Rust——这个语言这两年真的是哪里痒挠哪里。从浏览器引擎(Servo)到构建工具(Turbopack、Biome)到现在的 Node 工具链,Rust 基本上把前端基建全部重写了一遍。哪天要是有人用 Rust 写了个 IDE 出来,我也不会觉得奇怪。噢,已经有 Lapce 了,那没事了。

上手是真的简单,一行命令装完就能用:

# macOS / Linux
curl -fsSL https://nubjs.com/install.sh | bash

# Windows (PowerShell)
irm https://nubjs.com/install.ps1 | iex

装完之后,你原来的工作流几乎不用改。原来是 npm run dev,现在改成 nub run dev。原来是 npx prisma generate,现在改成 nubx prisma generate

nub tools

感受一下区别——第一次敲 nub run dev,终端几乎是按下回车的同时就弹出了输出。说实话,那一刻我盯着屏幕愣了两秒,以为命令没敲进去。

# 跑一个 TypeScript 文件
nub index.ts

# 原生 watch 模式,不用 nodemon
nub watch src/server.ts

# 安装依赖,兼容 pnpm/npm/yarn 的锁文件
nub install

# 管理 Node 版本,替代 nvm
nub node install 26

这个 nubx 的设计我觉得挺聪明的。默认先找本地 node_modules 里的包,找不到再去 registry 下载,跑完就扔。不会有 npx 那种"每次都要检查更新"的延迟。

没懂作者为什么把 nubx 设计成默认不缓存——不过算了,快就完事了。

同类工具里,bun 其实也做类似的事,但 bun 选择了一条更激进的路——它直接做了一个全新的 JavaScript 运行时。这意味着你的项目如果用了某些 Node 独有的 API,可能会有兼容性问题。

Nub 的思路相反:我增强 Node,但不取代它。你现有的 package.json、锁文件、甚至 tsconfig.json 路径映射,它全都认识。

说到这里,如果你对 Rust 重写前端基建这个趋势感兴趣,我之前还整理过《用 Rust 重新定义前端工具链》那篇文章,关注后回复「rust」可以看。这个赛道现在越来越热闹了,Oxc、Biome、Turbopack 加上今天的 Nub,一条链路快被 Rust 包圆了。

原理大概是这样,细节可能有出入——有懂的大佬欢迎指正。

安全方面 Nub 也没落下。默认拦截 postinstall 脚本(再也不用担心某个依赖在安装时偷偷干坏事),安装时自动查 OSV 数据库检查已知恶意包,还有 24 小时的"最小发布年龄"保护——新发布的包等一天才能被安装,给安全团队留出反应时间。

这些东西怎么说呢,就是……就是那种"没出事的时候你觉得多余,出了事你觉得真香"的功能。

一句话总结:如果你的项目每天要敲几十次 npm run,装一个 Nub,你的终端风扇可以少转一会儿。

它是你 Node 工作流的超频开关——同样的操作,少等几百毫秒。日积月累,省下来的时间够你多看两篇技术文章了。

项目地址:https://github.com/nubjs/nub

本文使用 MGO 编辑并发布

关注"何三笔记",回复"mgo" 免费下载使用