跳到主要内容

Bun 是什么?

Bun 是用于运行 JavaScript 和 TypeScript 应用程序的集成工具包。它以单一可执行文件的形式发布,文件名为 bun

Bun 的核心是 Bun 运行时,这是一种快速 JavaScript 运行时,可直接替换 Node.js。Bun 采用 Zig 语言编写,底层采用 JavaScriptCore 引擎,大大减少了启动时间和内存使用量。

$ bun run index.tsx  # 开箱即支持 TS 和 JSX 

bun 命令行工具还实现了测试运行器(test runner)、脚本运行器(script runner)和兼容 Node.js 的软件包管理器的功能,所有这些都比现有工具快得多,而且几乎无需改动即可在现有 Node.js 项目中使用。

$ bun run start                 # 运行 `start` 脚本
$ bun install <pkg> # 安装软件包
$ bun build ./index.tsx # 为浏览器打包项目
$ bun test # 运行测试用例
$ bunx cowsay 'Hello, world!' # 运行软件包
备注

Bun 仍在开发中。 使用 Bun 能够加速开发流程,或者在资源受限的环境中运行比较简单的代码(例如 serverless functions)。我们正在全面兼容 Node.js 以及与现有框架的集成方面努力开发。请加入 Discord 并关注 GitHub 仓库,以了解新版本的动态。

请点击下面的链接开始 Bun 的使用吧,或继续阅读并了解有关 Bun 的更多信息。

什么是运行时(runtime)?

JavaScript(或正式名称 ECMAScript)只是一种编程语言的 规范。任何人都可以编写一个 JavaScript 引擎,用于接收并执行有效的 JavaScript 程序。目前最流行的两个 JavaScript 引擎是 V8(由 Google 开发) 和 JavaScriptCore(由 Apple 开发)。这两个 JavaScript 引擎都是开源的。

但大多数 JavaScript 程序都不是在真空中运行的。它们需要一种访问外部世界的方式来执行有用的任务。这就是 运行时(runtimes) 的用武之地。运行时实现了额外的 API,这些 API 可供运行时执行的 JavaScript 程序调用。

浏览器

值得注意的是,浏览器内置的 JavaScript 运行时实现了一系列特定于 web 的 API,这些 API 通过全局对象 window 对外公开。浏览器执行的任何 JavaScript 代码都可以使用这些 API 在当前网页的上下文中实现交互或动态行为。 Node.js

Node.js

同样,Node.js 是一种 JavaScript 运行时,可用于服务器等非浏览器环境。由 Node.js 执行的 JavaScript 程序可以访问一组 Node.js 特有的 globals,如 Bufferprocess__dirname等,此外还可以访问用于执行操作系统级任务的内置模块,如读写文件(node:fs)和网络通讯(node:netnode: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,例如 fetchWebSocketReadableStream。Bun 底层使用的是 JavaScriptCore 引擎,该引擎由 Apple 为 Safari 开发,因此某些 API(例如 HeadersURL)直接使用了 Safari 的实现
  • 兼容 Node.js。除了支持 Node 风格的模块解析外,Bun 还致力于实现与 Node.js 内置的 globals (process, Buffer) 和模块(pathfshttp 等)的完全兼容。 这一目标还未实现,仍在努力中。 请参阅 阅兼容性页面 以了解当前的进展。

Bun 不仅仅是一个运行时。Bun 的长期目标是成为使用 JavaScript/TypeScript 构建应用程序的一站式基础工具包,包括软件包管理器、转换器、打包器、脚本运行器、测试运行器等。