Show HN: Nub,一款类Bun的Node.js全能工具包
速览
Nub是一个在Hacker News上展示的开源项目,定位为Node.js的全能型开发工具包。它借鉴了Bun的高性能特性,试图为开发者提供一体化的解决方案。该项目目前处于早期展示阶段,主要面向Node.js生态的开发者。
AI 深度解读
Show HN: Nub – 一个类似 Bun 的 Node.js 全栈工具包
背景
Node.js 作为 JavaScript 生态的核心运行时,长期以来面临着开发体验(DX)与性能之间的权衡。虽然 Node.js 本身稳定且兼容性强,但在启动速度、TypeScript 支持、脚本执行效率以及包管理体验上,往往需要依赖额外的工具链(如 tsx、ts-node、npx、pnpm 等)来弥补不足。与此同时,Bun 和 Deno 等新兴运行时通过重写底层架构,提供了更快的启动速度和更现代化的开箱即用体验,但也带来了运行时锁定(Vendor Lock-in)和 API 不兼容的风险。
在此背景下,Nub 应运而生。它并非试图取代 Node.js,而是作为一个基于 Rust 编写的增强层,旨在提供类似 Bun 的开发体验,同时保持对标准 Node.js 的完全兼容。Nub 的核心哲学是“增强而非替换”,它利用 Node.js 现有的扩展接口(如 --import、module.registerHooks 等)来注入性能优化和新功能,从而让用户在不迁移代码库的前提下,获得更快的构建、安装和运行速度。
核心内容
Nub 是一个一体化的工具箱,涵盖了从文件运行、脚本执行、包管理到 Node 版本管理的全流程。其核心特性如下:
1. 极速的文件运行与 TypeScript 支持
Nub 提供了一个类似于 node 的命令接口,但针对现代开发需求进行了深度优化。
- TypeScript 优先:原生支持
.ts、.tsx、.mts、.cts等文件,无需构建步骤。支持enum、namespace、Decorators(包括emitDecoratorMetadata)以及现代语法如using(在需要时会自动降级处理)。 - 智能解析:支持无扩展名导入(extensionless imports)和
tsconfig.json中的paths配置。 - 内置 Polyfills:自动加载
.env*文件(与 Next.js/Vite 行为一致),并提供Temporal、Worker、URLPattern、WebSocket、EventSource等现代 API 的 Polyfill。 - 实验性特性解锁:无需
--experimental标志即可使用node:sqlite、vm.Module、localStorage等 Node.js 实验性 API。 - 性能提升:相比
tsx,Nub 的启动速度提升了 2.9 倍。
2. 智能依赖监听与热重载
Nub 的 watch 模式基于解析后的依赖图,而非简单的文件路径监听。
- 自动追踪:自动监控解析后的依赖图,无需维护 glob 列表。
- 关键文件监控:同时监控
.env*、tsconfig.json的 extends 链以及package.json等关键配置文件的变化。 - 原生引擎:基于 Node.js 自身的
--watch引擎运行,默认保留输出,确保开发体验的流畅性。
3. 高性能脚本运行器 (nub run)
nub run 是 npm run 和 pnpm run 的替代品,旨在消除 JavaScript 脚本运行器的启动延迟。
- Rust 核心:由 Rust 编写的二进制文件,无 JavaScript 启动开销。
- 速度优势:在 macOS 基准测试中,
nub run比pnpm run快约 24 倍(冷启动约 14ms vs 300ms+)。 - 完整生命周期:支持
pre/post钩子以及完整的npm_*环境变量。 - Workspace 支持:完全兼容
pnpm的 Workspace 特性,包括-r、--filter、--parallel等标志,并支持pnpm的--filter语法(如图形选择器和变更选择器)。
4. 极速包执行器 (nubx)
nubx 是 npx 和 pnpm dlx 的替代品,解决了传统工具中双重 Node.js 进程生成的性能瓶颈。
- 本地优先:优先查找
node_modules/.bin,无论该包是由哪个包管理器安装的。 - Registry 回退:如果本地未安装,则从注册表下载并执行,执行后丢弃(与
npx行为一致)。 - 速度优势:运行本地 bin 的速度比
npx快约 19 倍。 - 功能 parity:支持
pnpm exec/pnpm dlx的所有标志,包括 shell 模式。
5. 兼容且安全的包管理器 (nub install)
Nub 内置了基于 Aube 引擎的包管理器,CLI 标志与 pnpm 兼容,以保留用户的肌肉记忆。
- 兼容模式:当在项目目录中运行
nub install时,Nub 会检测现有的包管理器(通过package.json#packageManager或 lockfile),并以兼容模式运行,尊重该包管理器的配置。 - 安全默认值:
- 默认阻止
postinstall脚本。 - 默认通过
osv.dev检查已知恶意包版本。 - 默认拒绝来源降级(provenance downgrades)。
- 默认设置 24 小时
minimumReleaseAge。
- 默认阻止
- 速度优势:避免了基于 JS 的包管理器在每个命令中产生的 Node.js 引导延迟。
6. 原生 Corepack 替代品 (nub pm shim)
Nub 在原生 Rust 中实现了 Corepack 的功能,用于提供和运行项目锁定的 pnpm/npm/yarn 版本。
- 全局 Shim:通过
nub pm shim注册全局别名。 - 自动版本管理:当使用这些别名时,Nub 会自动检测项目所需的版本,若未安装则自动安装,并使用正确版本执行命令。
- 背景:Corepack 已在 Node.js v25 中从核心解绑,Nub 为此提供了便捷的替代方案。
7. Node.js 版本管理 (nub node)
虽然 Nub 通常会自动安装和缓存所需的 Node 版本,但也支持手动管理。
- 自动解析优先级:
NODE_EXECUTABLE环境变量(最高优先级)package.json#devEngines.node-version.nvmrcpackage.json#engines
- 手动命令:支持
install、ls、uninstall、pin等命令,类似于nvm或fnm。
安装与使用
Nub 提供了多种安装方式:
- macOS/Linux:
curl -fsSL https://nubjs.com/install.sh | bash - Windows (PowerShell):
irm https://nubjs.com/install.ps1 | iex - npm:
npm install -g --ignore-scripts=false @nubjs/nub - GitHub Actions:使用
nubjs/setup-nub@v0替代actions/setup-node@v4,两者完全兼容。
关键要点
- 增强而非替换:Nub 不引入新的运行时,而是通过 Node.js 的扩展接口(
--import、module.registerHooks)和 N-API 原生插件(嵌入 oxc 进行预转译)来增强 Node.js。 - 性能显著:在脚本运行(24x)、包执行(19x)和启动速度(2.9x vs tsx)方面均有显著的性能提升,主要得益于 Rust 后端和无 JS 启动开销。
- 全栈工具集:集成了文件
