Bun 运行时
一个快速的 JavaScript 运行时,设计为 Node.js 的替代品
Bun 包管理器
利用全局缓存和工作区,安装包速度比 npm 快30倍
Bun 测试运行器
与 Jest 兼容,TypeScript 优先支持快照、DOM 和监听模式的测试
Bun 打包器
为浏览器和服务器打包 TypeScript、JSX、React 和 CSS
入门指南
Bun 作为一个单一的、无依赖的二进制文件提供,包含运行时、包管理器、测试运行器和打包器。您是 Bun 新手吗?内部组成
- 运行时:几乎无开销地执行 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 程序并执行它。当前最流行的两个引擎是 V8(Google 研发)和 JavaScriptCore(Apple 研发),二者都是开源的。 但是大多数 JavaScript 程序不会在真空中运行。它们需要访问外部世界以完成有用任务。这时就需要 运行时。运行时实现了额外的 API,供执行的 JavaScript 程序使用。浏览器
浏览器内置了 JavaScript 运行时,提供了一组与 Web 相关的 API,通过全局对象window 暴露。浏览器执行的任何 JavaScript 代码都可以使用这些 API,在当前网页环境中实现交互或动态行为。
Node.js
同样,Node.js 是用于非浏览器环境(如服务器)的 JavaScript 运行时。Node.js 执行的程序可以访问一组 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 底层使用由 Apple 为 Safari 开发的 JavaScriptCore 引擎,因此一些 API 例如Headers和URL直接采用了 Safari 的实现。 - Node.js 兼容。除了支持 Node 风格的模块解析外,Bun 还致力于完全兼容 Node.js 内置全局变量(
process、Buffer)和模块(path、fs、http等)。这是一项持续进行中的工作,目前尚未完成。详见 兼容性页面 获取最新进度。