Nub 最近在 GitHub 上发布,最容易让人误会的一点是:它看起来很像 Bun,但它明确不替换 Node.js。
它用 Rust 写命令行和工具层,底下仍然调用 stock Node。增强方式也走 Node 现有机制,比如 --import、--require、module.registerHooks() 和 N-API。
所以这事有意思的地方不在“又来了一个 JS 运行时”。更准确地说,Nub 想把 Node 项目里一堆分散工具压成一个更快的入口。
Nub 的位置:增强 Node,不抢 Node 的位置
Node.js 项目里的日常工具链,很多人都熟。
跑 JS 用 node。跑 TS 用 tsx 或 ts-node。跑脚本用 npm run 或 pnpm run。临时执行包用 npx 或 pnpm dlx。watch 用 nodemon。Node 版本和包管理器入口,又交给 nvm、Corepack 这类工具。
Nub 想做的,是把这些入口收拢。
| 场景 | Nub 对应能力 | 常见替代对象 | 我的判断 |
|---|---|---|---|
| 文件运行 | nub <file> | node、tsx、ts-node、dotenv-cli | 降低 TS/JSX 即时运行成本 |
| 脚本执行 | nub run | npm run、pnpm run | 主打 CLI 启动速度 |
| 包执行 | nubx | npx、pnpm dlx | 本地优先,缺包再拉取 |
| 安装依赖 | nub install | npm、pnpm | 偏 pnpm 习惯,强调 compat-mode |
| watch / 版本管理 | watch、nub node、nub pm | nodemon、nvm、Corepack | 把外围工程入口统一起来 |
它支持 TypeScript、JSX、dotenv、tsconfig paths、扩展名省略解析,也支持 YAML、TOML、JSONC、JSON5、TXT 等常见数据格式 loader。
README 还提到,它会对部分现代 API 做 polyfill 或解除实验 flag,比如 Temporal、URLPattern、WebSocket、EventSource、node:sqlite 等。
这套设计的关键,是“不换地基”。
对已经押在 Node.js 上的团队来说,换运行时是一件重活。测试、部署、监控、native addon、边缘依赖,都可能被牵出来。Nub 的路线更保守:承认 Node 还是地基,只在工具链外层提速。
这也是它和 Bun、Deno 最大的区别。Bun 和 Deno 都带有运行时路线选择。Nub 更像是给 Node 装一套更顺手的工具把手。
性能数字很猛,但先按官方 benchmark 读
Nub README 给的性能数字很漂亮。
nub run 调度脚本约 14.7ms,称比 pnpm run 快约 24 倍。nubx esbuild --version 约 11ms,称比 npx 快约 19 倍。nub install 在 create-t3-app、222 个依赖的 warm frozen install 场景中约 1122ms,称比 pnpm install 快约 2.5 倍。
但这些数字来自项目 README 的官方 benchmark。它们可以说明设计目标和潜在收益,不能直接当成第三方独立评测结论。
真实项目里,决定能不能用的往往不是单次快不快,而是这些变量:
- 冷启动和 warm cache 差异有多大;
- monorepo、workspace filter、私有 registry 能不能稳;
- native addon、postinstall 例外、CI 缓存是否顺;
- Windows 表现、lockfile 迁移、失败恢复是否可靠;
- 维护活跃度、许可证、发布节奏是否适合团队引入。
这些信息需要团队自己看仓库和实际跑一遍。材料目前只说明 Nub 在 GitHub 发布及 README 主张,不能推出它已经主流化,也不能暗示被 Node 官方采纳。
包管理部分也要谨慎看。
Nub 强调 pnpm 风格兼容,会检测已有 lockfile 和 config,进入 compat-mode。它还默认阻止 postinstall、查询 osv.dev 恶意包版本、拒绝 provenance downgrade,并设置 24 小时 minimumReleaseAge。
这类安全默认值,对企业项目有吸引力。代价是,一些依赖安装里的旧习惯和边缘行为,可能会被更早暴露出来。
所以它目前不适合被写成 npm、pnpm、yarn、bun 的完全无差异替代品。README 讲的是特定 flag、config 和 compat-mode 范围。尤其 Yarn 更偏 read-only 取向。
对开发者和工程效率团队,动作不一样
对 Node.js / TypeScript 开发者,Nub 最现实的用法不是马上替换包管理器。
更稳的动作,是先把它放到低风险入口里试:本地跑 TS/JSX 文件、临时执行包、跑项目脚本、做 watch。它如果真能减少 tsx、dotenv-cli、nodemon、npx 这类工具的切换成本,日常体感会很直接。
对前端基础设施和工程效率维护者,关注点要更硬一点。
不要只看 benchmark。应该拿一个真实仓库测安装、锁文件、workspace、私有源、CI 缓存、postinstall 例外和回滚路径。采购或团队级引入可以延后,先做旁路评估更合理。
| 读者 | 可以先做什么 | 暂时别做什么 |
|---|---|---|
| Node.js / TypeScript 开发者 | 用 Nub 跑单文件、脚本、临时包执行 | 直接删除原有 npm/pnpm 流程 |
| 前端基础设施维护者 | 在 CI 辅助任务或小仓库做兼容性测试 | 一步替换主仓库包管理器 |
我更在意的,是 Nub 能不能把“快”变成“稳”。
工具链提速很容易让人兴奋,但企业项目买账的顺序通常相反:先不坏,再更快。尤其在 Node 生态里,兼容性不是锦上添花,而是入场券。
回到开头,Nub 最值得看的一点,正是它没有把自己包装成新地基。它不夺 Node 的位置,只补 Node 工具链的短板。
这条路不炫,但实用。接下来真正的考题也很清楚:真实仓库里的兼容性,能不能配得上 README 里的速度。
