Bun 是一个适用于 JavaScript 和 TypeScript 应用程序的一体化工具包。它以一个名为 bun
的可执行文件形式提供。
其核心是 Bun 运行时,这是一个快速的 JavaScript 运行时,设计为 Node.js 的替代品。它使用 Zig 编写,并且在底层由 JavaScriptCore 提供支持,从而大幅减少了启动时间和内存使用量。
bun run index.tsx # TS and JSX supported out of the box
bun
命令行工具还实现了测试运行器、脚本运行器和与 Node.js 兼容的包管理器,所有这些都比现有工具快得多,并且几乎无需更改即可在现有的 Node.js 项目中使用。
bun run start # run the `start` script
bun install <pkg> # install a package
bun build ./index.tsx # bundle a project for browsers
bun test # run tests
bunx cowsay 'Hello, world!' # execute a package
Bun 仍在开发中。使用它来加速你的开发工作流,或在资源受限的环境(如无服务器函数)中运行更简单的生产代码。我们正在努力实现更完整的 Node.js 兼容性,并与现有的框架集成。加入 Discord 并关注 GitHub 存储库,以了解未来版本的最新信息。
从下面的快速链接开始,或继续阅读以了解有关 Bun 的更多信息。
Install Bun
Do the quickstart
Install a package
Use a project template
Bundle code for production
Build an HTTP server
Build a Websocket server
Read and write files
Run SQLite queries
Write and run tests
什么是运行时?
JavaScript(或者更正式地说是 ECMAScript)只是一个编程语言的规范。任何人都可以编写一个 JavaScript 引擎,它可以读取有效的 JavaScript 程序并执行它。当今使用最广泛的两个引擎是 V8(由 Google 开发) 和 JavaScriptCore(由 Apple 开发)。两者都是开源的。
但是,大多数 JavaScript 程序不会在真空中运行。它们需要一种方法来访问外部世界以执行有用的任务。这就是运行时的用武之地。它们实现了额外的 API,然后这些 API 可供它们执行的 JavaScript 程序使用。
浏览器
值得注意的是,浏览器附带了 JavaScript 运行时,该运行时实现了一组通过全局 window
对象公开的特定于 Web 的 API。浏览器执行的任何 JavaScript 代码都可以使用这些 API 在当前网页的上下文中实现交互式或动态行为。
Node.js
类似地,Node.js 是一个 JavaScript 运行时,可用于非浏览器环境,例如服务器。Node.js 执行的 JavaScript 程序可以访问一组特定于 Node.js 的 全局变量,例如 Buffer
、process
和 __dirname
,此外还有用于执行操作系统级任务的内置模块,例如读/写文件 (node:fs
) 和网络 (node:net
、node:http
)。Node.js 还实现了基于 CommonJS 的模块系统和解析算法,该算法早于 JavaScript 的原生模块系统。
Bun 被设计为 Node.js 的一个更快、更精简、更现代的替代品。
设计目标
Bun 从头开始设计,充分考虑了当今的 JavaScript 生态系统。
- 速度。Bun 进程启动 比 Node.js 快 4 倍(亲自试一试!)
- TypeScript 和 JSX 支持。你可以直接执行
.jsx
、.ts
和.tsx
文件;Bun 的转换器在执行前将这些文件转换为纯 JavaScript。 - ESM 和 CommonJS 兼容性。世界正在向 ES 模块 (ESM) 迈进,但 npm 上的数百万个包仍然需要 CommonJS。Bun 推荐 ES 模块,但支持 CommonJS。
- Web 标准 API。Bun 实现了标准 Web API,例如
fetch
、WebSocket
和ReadableStream
。Bun 由 JavaScriptCore 引擎提供支持,该引擎由 Apple 为 Safari 开发,因此某些 API(如Headers
和URL
)直接使用 Safari 的实现。 - Node.js 兼容性。除了支持 Node 风格的模块解析之外,Bun 旨在与内置 Node.js 全局变量(
process
、Buffer
)和模块(path
、fs
、http
等)完全兼容。这是一项正在进行的工作,尚未完成。有关当前状态,请参阅 兼容性页面。
Bun 不仅仅是一个运行时。其长期目标是成为一个用于构建 JavaScript/TypeScript 应用程序的紧密的基础设施工具包,包括包管理器、转换器、打包器、脚本运行器、测试运行器等。