Bun 是一个新的、雄心勃勃的 JavaScript 工具集和运行时。早期采用者一直报告说 Bun 速度非常快——速度快到被一些人吹捧为 Node.js 杀手。好奇,我决定亲自检查一下 Bun 并将其与竞争对手进行对比。

真的像人们说的那么快吗?它有多稳定?它真的比 Node 更好吗?我可以将它与持续集成一起使用吗?

什么是Bun?

Bun 是 JavaScript 运行时系列的最新成员。它在 2018 年问世时一直在掀起波澜,与 Deno 相媲美。Bun位于 Node 和 Deno 之间。Bun 和 Deno 一样,开箱即用地支持 TypeScript,并提供对开发人员友好的功能,例如顶级等待和内置 Web API。但是,与 Deno 不同的是,Bun 旨在成为 Node、Webpack、Babel、Yarn 和 PostCSS 的替代品——所有这些都在一个简洁的包中。

另外,它还有一个非常可爱的吉祥物。

Bun 使用 MIT 和 LGPL2 许可证(由于 JavaScriptCore)发布,在撰写本文时,版本为 v0.1.4。

Bun 与 Deno 和 Node 相比如何?

虽然 Bun 受到 Node 和 Deno 的启发,但它显然也在尝试通过提供包含电池的工具集来改善开发体验和生产力。

Bun 采用了 Deno 的功能,例如作为单个二进制文件发布并具有原生 TypeScript 支持。

特征

bun

deno

TypeScript/TSX/JSX 支持

是的

是的

单个可执行文件

是的

是的

内置测试运行器

是(开发中)

是的

内置 Web API(获取、WebSocket 等)

是的

是的

顶级等待

是的

是的

npm 兼容性

是的

不兼容

是的

部分的

tsconfig.json 支持

是的

WebAssembly 支持

是的

是的

内置 linter 和格式化程序

是的

权限系统

是的

包清单格式

package.json

不适用

模块支持

ES 模块,CommonJS

ES 模块

协议

MIT,LGPL2

MIT

JS引擎

JavaScriptCore

V8

齐格,C++

锈,东京

与 Node 相比,Bun 在努力保持兼容的同时提供了更多的功能:

特征

bun

node

npm 兼容性

是的

是的

节点兼容性

是(测试版)

是的

单个二进制

是的

内置捆绑器和转译器

是的

原生 TypeScript 支持

是的

包清单格式

package.json

package.json

锁定文件格式

二进制

JSON

本机实时重载

是的

内置.env,.toml支持

是的

顶级等待

是的

仅在 ES 模块上

JS引擎

JavaScriptCore

V8

语言

zig,C++

C、C++

协议

MIT,LGPL2

MIT,BSD

然而,处于测试阶段意味着 Bun仍有一些怪癖:

  • 文档是有限的,但是Bun 的 Discord非常活跃并且是一个很好的知识来源。
  • 没有本机 Windows 支持(但适用于 WSL)
  • Bun 在安装包时可能会卡住,fetch 不可靠,而且,虽然我从来没有发生过,但 Bun 偶尔会出现段错误。
  • Bun 还不是 100% 兼容 Node。并非每个 npm 包都有效。例如,Express 目前还没有功能。
  • 发布到 npm 注册表不起作用。
  • 在 API 和 CLI 稳定之前,会发生各种重大更改。

Bun 有一些独特的生活质量特征:

  • 快速内置 sqlite3 模块(MySQL 和 PostgreSQL 也在计划中)
  • 开箱即用的.env,.toml和 CSS 支持(不需要额外的加载器)
  • React 和 Next.js 的内置框架支持和优化
  • 内置外部函数接口 (FFI),用于对 C、Rust 或 Kotlin 等 ABI 支持语言的低级调用
  • 将错误复制为 Markdown 的选项(用于快速共享)

谢谢大家阅读,喜欢的朋友请关注点赞转发,带你了解最新技术趋势。