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 兼容性。