Skip to main content

Bun 运行时

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

Bun 包管理器

利用全局缓存和工作区,安装包速度比 npm 快30倍

Bun 测试运行器

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

Bun 打包器

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

入门指南

Bun 作为一个单一的、无依赖的二进制文件提供,包含运行时、包管理器、测试运行器和打包器。您是 Bun 新手吗?

安装 Bun

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

快速开始

使用 Bun.serve 在几分钟内创建 Hello world。

内部组成

  • 运行时:几乎无开销地执行 JavaScript/TypeScript 文件和包脚本。
  • 包管理器:使用 bun install 实现快速安装、工作区、覆盖和审计。
  • 测试运行器:支持 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 程序。

浏览器

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

Node.js

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