Skip to main content

Bun 运行时

一个快速的 JavaScript 运行时,设计为 Node.js 的直接替代品

Bun 包管理器

比 npm 快 30 倍的包安装速度,支持全局缓存和 Workspace

Bun 测试运行器

兼容 Jest,TypeScript 优先,支持快照、DOM 和监听模式

Bun 打包器

为浏览器和服务器打包 TypeScript、JSX、React 和 CSS

开始上手

Bun 作为一个独立的、无依赖的二进制文件发布,包含运行时、包管理器、测试运行器和打包器。Bun 新手?

安装 Bun

支持的平台和所有安装方法。

快速入门

几分钟内用 Bun.serve 写出 Hello World。

内含功能

  • 运行时:以近乎零开销执行 JavaScript/TypeScript 文件和包脚本。
  • 包管理器:通过 bun install 实现快速安装、Workspace、Overrides 和审计。
  • 测试运行器:兼容 Jest、TypeScript 优先,支持快照、DOM 和监听模式。
  • 打包器:原生打包 JS/TS/JSX,支持代码分割、插件和 HTML 导入。
使用上面的卡片探索每个领域。每个部分都包含概述、快速示例、参考和最佳实践,便于快速浏览和深入学习。

什么是 Bun?

Bun 是一个面向 JavaScript 和 TypeScript 应用程序的一体化工具包。它作为一个名为 bun 的单一可执行文件发布。 其核心是 Bun 运行时,一个快速的 JavaScript 运行时,设计为 Node.js 的直接替代品。它使用 Rust 编写,底层由 JavaScriptCore 驱动,降低了启动时间和内存占用。
terminal
bun 命令行工具还实现了测试运行器、脚本运行器和 Node.js 兼容的包管理器,所有这些都显著快于现有工具,并且可以在现有 Node.js 项目中直接使用,几乎无需修改。
terminal

什么是运行时?

JavaScript(或者更正式地说,ECMAScript)只是一种编程语言的 规范。任何人都可以编写一个 JavaScript 引擎,读取有效的 JavaScript 程序并执行它。目前最流行的两个引擎是 V8(由 Google 开发)和 JavaScriptCore(由 Apple 开发)。两者都是开源的。 但大多数 JavaScript 程序并不是在真空中运行的。它们需要一种方式来访问外部世界以执行有用的任务。这就是 运行时 的作用所在。它们实现了额外的 API,并将这些 API 提供给执行的 JavaScript 程序使用。

浏览器

浏览器内置了 JavaScript 运行时,实现了一套 Web 特定的 API,暴露在全局的 window 对象上。浏览器执行的任何 JavaScript 代码都可以使用这些 API 来为当前网页添加交互或动态行为。

Node.js

Node.js 是一个适用于非浏览器环境(如服务器)的 JavaScript 运行时。由 Node.js 执行的 JavaScript 程序可以访问一套 Node.js 特定的全局对象,如 Bufferprocess__dirname,此外还有用于操作系统级任务(如读写文件)的内置模块(node:fs)和网络模块(node:netnode: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,如 fetchWebSocketReadableStream。Bun 基于 Apple 为 Safari 开发的 JavaScriptCore 引擎,因此某些 API(如 HeadersURL)直接使用了 Safari 的实现
  • Node.js 兼容性。除了支持 Node 风格的模块解析外,Bun 还致力于与 Node.js 内置全局对象(processBuffer)和模块(pathfshttp)实现完全兼容。这是一项持续进行的工作。 查看 Node.js 兼容性了解当前状态。
Bun 不仅仅是一个运行时。其长期目标是成为一个用于使用 JavaScript/TypeScript 构建应用程序的凝聚性基础设施工具包:包管理器、转译器、打包器、脚本运行器和测试运行器。