← 返回信息流
AI 资讯Hacker News·2 小时前

Show HN: Nub,一款类Bun的Node.js全能工具包

原标题:Show HN: Nub – A Bun-like all-in-one toolkit for Node.js

速览

Nub是一个在Hacker News上展示的开源项目,定位为Node.js的全能型开发工具包。它借鉴了Bun的高性能特性,试图为开发者提供一体化的解决方案。该项目目前处于早期展示阶段,主要面向Node.js生态的开发者。

AI 深度解读

Show HN: Nub – 一个类似 Bun 的 Node.js 全栈工具包

背景

Node.js 作为 JavaScript 生态的核心运行时,长期以来面临着开发体验(DX)与性能之间的权衡。虽然 Node.js 本身稳定且兼容性强,但在启动速度、TypeScript 支持、脚本执行效率以及包管理体验上,往往需要依赖额外的工具链(如 tsxts-nodenpxpnpm 等)来弥补不足。与此同时,Bun 和 Deno 等新兴运行时通过重写底层架构,提供了更快的启动速度和更现代化的开箱即用体验,但也带来了运行时锁定(Vendor Lock-in)和 API 不兼容的风险。

在此背景下,Nub 应运而生。它并非试图取代 Node.js,而是作为一个基于 Rust 编写的增强层,旨在提供类似 Bun 的开发体验,同时保持对标准 Node.js 的完全兼容。Nub 的核心哲学是“增强而非替换”,它利用 Node.js 现有的扩展接口(如 --importmodule.registerHooks 等)来注入性能优化和新功能,从而让用户在不迁移代码库的前提下,获得更快的构建、安装和运行速度。

核心内容

Nub 是一个一体化的工具箱,涵盖了从文件运行、脚本执行、包管理到 Node 版本管理的全流程。其核心特性如下:

1. 极速的文件运行与 TypeScript 支持

Nub 提供了一个类似于 node 的命令接口,但针对现代开发需求进行了深度优化。

  • TypeScript 优先:原生支持 .ts.tsx.mts.cts 等文件,无需构建步骤。支持 enumnamespace、Decorators(包括 emitDecoratorMetadata)以及现代语法如 using(在需要时会自动降级处理)。
  • 智能解析:支持无扩展名导入(extensionless imports)和 tsconfig.json 中的 paths 配置。
  • 内置 Polyfills:自动加载 .env* 文件(与 Next.js/Vite 行为一致),并提供 TemporalWorkerURLPatternWebSocketEventSource 等现代 API 的 Polyfill。
  • 实验性特性解锁:无需 --experimental 标志即可使用 node:sqlitevm.ModulelocalStorage 等 Node.js 实验性 API。
  • 性能提升:相比 tsx,Nub 的启动速度提升了 2.9 倍。

2. 智能依赖监听与热重载

Nub 的 watch 模式基于解析后的依赖图,而非简单的文件路径监听。

  • 自动追踪:自动监控解析后的依赖图,无需维护 glob 列表。
  • 关键文件监控:同时监控 .env*tsconfig.json 的 extends 链以及 package.json 等关键配置文件的变化。
  • 原生引擎:基于 Node.js 自身的 --watch 引擎运行,默认保留输出,确保开发体验的流畅性。

3. 高性能脚本运行器 (nub run)

nub runnpm runpnpm run 的替代品,旨在消除 JavaScript 脚本运行器的启动延迟。

  • Rust 核心:由 Rust 编写的二进制文件,无 JavaScript 启动开销。
  • 速度优势:在 macOS 基准测试中,nub runpnpm run 快约 24 倍(冷启动约 14ms vs 300ms+)。
  • 完整生命周期:支持 pre/post 钩子以及完整的 npm_* 环境变量。
  • Workspace 支持:完全兼容 pnpm 的 Workspace 特性,包括 -r--filter--parallel 等标志,并支持 pnpm--filter 语法(如图形选择器和变更选择器)。

4. 极速包执行器 (nubx)

nubxnpxpnpm 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 版本,但也支持手动管理。

  • 自动解析优先级
    1. NODE_EXECUTABLE 环境变量(最高优先级)
    2. package.json#devEngines.node-version
    3. .nvmrc
    4. package.json#engines
  • 手动命令:支持 installlsuninstallpin 等命令,类似于 nvmfnm

安装与使用

Nub 提供了多种安装方式:

  • macOS/Linuxcurl -fsSL https://nubjs.com/install.sh | bash
  • Windows (PowerShell)irm https://nubjs.com/install.ps1 | iex
  • npmnpm install -g --ignore-scripts=false @nubjs/nub
  • GitHub Actions:使用 nubjs/setup-nub@v0 替代 actions/setup-node@v4,两者完全兼容。

关键要点

  • 增强而非替换:Nub 不引入新的运行时,而是通过 Node.js 的扩展接口(--importmodule.registerHooks)和 N-API 原生插件(嵌入 oxc 进行预转译)来增强 Node.js。
  • 性能显著:在脚本运行(24x)、包执行(19x)和启动速度(2.9x vs tsx)方面均有显著的性能提升,主要得益于 Rust 后端和无 JS 启动开销。
  • 全栈工具集:集成了文件
查看原文 →github.com