👍 Rust 为 Node 插上翅膀,反超 Bun 和 pnpm,一体化工具我也有!

👇 今日要闻

打破信息壁垒,走近全球前端。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 专属语法都不支持,用户实际开发还是依赖 tsxtsc
  • 没有像 Deno 或 Bun 内置测试库,需要借助 vitestjest 等流行测试框架
  • 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 runpnpm 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 丰富生态的同时,纵享丝滑的开发体验。

👍 以上就是本期《前端日报》的全部内容了,如果读完对你有所帮助,可以按赞打卡、在看推荐或转发分享。

🙏 已经关注我的粉丝们,我们下期再见啦,掰掰~~

👇 参考文献:

相关推荐
坐而论道_1 小时前
兼容低版本 Android:让现代 Web 应用在旧 WebView 上稳定运行
前端·面试
ssshooter2 小时前
Promise 和 async/await 被 try-catch 包裹时的行为差异
前端·javascript·面试
肖志-AI全栈2 小时前
从零讲透 Ajax:XHR、Fetch、JSON 序列化到异步编程全链路
前端·ajax·json
yyt3630458412 小时前
KlineChartQuant Tooltip 高频交互 200FPS 性能优化完整复盘
前端·经验分享·性能优化·typescript·vue·交互·chrome devtools
2601_963771372 小时前
WordPress SEO Guide: Boost Rankings Without Technical Jargon
前端·php
李顿波2 小时前
Chrome 扩展程序 MV3 架构组件概览
前端·chrome·浏览器插件
KingCodeHan3 小时前
ESLint 完全指南:从入门到精通
前端
GHL2842710903 小时前
安装chrome浏览器
前端·chrome
kisshyshy3 小时前
从0到1彻底理解流式输出:先读懂Vue的“乐高积木”,再拧开LLM的“数据水龙头”
javascript·vue.js·人工智能