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:net、node:http)之外,还可以访问一组 Node.js 特有的全局变量,例如 Buffer、process 和 __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 实现了
fetch、WebSocket和ReadableStream等标准 Web API。Bun 由 Apple 为 Safari 开发的 JavaScriptCore 引擎驱动,因此Headers和URL等部分 API 直接使用 Safari 的实现。 - Node.js 兼容性。除了支持 Node 风格的模块解析之外,Bun 还致力于完全兼容 Node.js 内置的全局对象(
process、Buffer)和模块(path、fs、http)。这项工作仍在进行中。 当前状态请参阅 Node.js 兼容性。