Bun 运行时
一款快速的 JavaScript 运行时,旨在作为 Node.js 的直接替代品
Bun 包管理器
使用全局缓存和工作区,可将包安装速度提升至 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 的直接替代品。它使用 Zig 编写,并在底层使用 JavaScriptCore,显著减少启动时间和内存使用。
terminal
bun 命令行工具还实现了测试运行器、脚本运行器和与 Node.js 兼容的包管理器,所有这些都比现有工具快得多,并且可以在现有的 Node.js 项目中使用,几乎不需要任何更改。
terminal
什么是运行时?
JavaScript(或更正式地称为 ECMAScript)只是一种 规范,用于编程语言。任何人都可以编写 JavaScript 引擎 来接收并执行有效的 JavaScript 程序。目前最流行的两个 JavaScript 引擎是 V8(由 Google 开发)和 JavaScriptCore(由 Apple 开发)。两者都是开源的。 但大多数 JavaScript 程序并不是孤立运行的。它们需要一种访问外部世界的方法来执行有用的任务。这就是 运行时 的作用。它们实现附加的 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 引擎驱动,这是苹果为 Safari 开发的,因此一些 API 如
Headers和URL直接使用 Safari 的实现。 - Node.js 兼容性。除了支持 Node 风格的模块解析,Bun 旨在实现与 Node.js 内置全局变量(process、Buffer)和模块(path、fs、http 等)的完全兼容。这是一个正在进行的工作,尚未完成。 请参阅 兼容性页面 获取当前状态。