Bun 已支持 Windows ! 了解在 Bun 1.1 中发生的新鲜事 →

Bun
重磅发布,Bun v1.1.34 在此! →

Bun 是一个快速的JavaScript
all-in-one toolkit|

开发、测试、运行、打包 JavaScript 或 TypeScript 项目如今都可以用 Bun 实现。Bun 是一个为速度而生的一站式 JavaScript 运行时,同时完全集成了打包器、 测试套件 和 Node.js 兼容的 包管理器

$ bun run

Bun 是一个 JavaScript 运行时

Bun是一个从零开始构建的新JavaScript运行时环境,旨在服务于现代JavaScript生态系统。它有三个主要设计目标:

Bun被设计为Node.js的即插即用替代品。它本身原生实现了数百个Node.js和Web API,包括 fspathBuffer等等。

Bun的目标是运行大部分全球的服务器端JavaScript,并提供工具来提高性能、减少复杂性并提高开发者的生产力。

Node.js 兼容性

Bun 的目标是成为 Node.js 的直接替代品。它实现了 Node 的模块解析算法、全局变量(比如Buffer process), 以及内建模块(比如fs path)。 点此跟踪 Bun 实现完全兼容性的进度。

飞快的运行性能

Bun 扩展了 JavaScriptCore 引擎(为 Safari 构建的注重性能的 JS 引擎),并在 Zig 中实现了本机速度功能。

继续与 node_modules 协同

使用 Bun,您仍然可以用 package.json 来管理您的依赖项。使用 Bun 的原生 npm 客户端来查看安装依赖项的速度有多快。

不再为“module”发狂

忘记有关 CommonJS、ESM、文件扩展名、解析优先级和 package.json 配置的复杂规则。Bun帮你都打理好了。

TypeScript

TypeScript 是 Bun 的一等公民。直接执行 .ts.tsx 文件。 Bun 尊重您在 tsconfig.json中的配置, 包括 "paths""jsx" 等。

Web 标准 API

Bun 实现了您熟悉和喜爱的 Web 标准 API,包括 fetchReadableStream RequestResponseWebSocket、 和FormData

JSX

JSX 也在原生支持范畴。 Bun 在内部将 JSX 语法转换为普通 JavaScript。就和解释TypeScript一样,Bun 默认采用 React,但尊重您在tsconfig.json中的配置。

监视模式

我们的 bun run CLI提供了一个智能的 --watch 选项,使得当任何导入的文件发生更改时会自动重新启动进程。

你所需的API,Bun 尽已集成其中

启动一个HTTP服务器

启动一个WebSocket服务器

读取和写入文件

对密码执行Hash处理

为浏览器执行打包

编写一个测试用例

文件系统路由

读取一个Stream

执行一个shell脚本

调用一个C函数

index.tsx
const server = Bun.serve({
  port: 3000,
  fetch(request) {
    return new Response("Welcome to Bun!");
  },
});

console.log(`Listening on localhost:${server.port}`);

$ bun install

Bun 兼容 NPM,还更快,妙不可言

Bun

pnpm

17x

npm

29x

Yarn

33x

从 Remix 应用程序的缓存中安装依赖项。
查看基准测试

兼容 Node.js

Bun 仍然会将您的依赖项安装到 node_modules 比如 npm 这样包管理器或其他包管理器中 - 但他们速度快多了。即便您不使用 Bun 运行时,也可将 Bun 作为包管理器使用。

难以置信的快

Bun 使用每个操作系统上最快的系统调用,使安装速度比您想象的更快。

工作空间

工作空间(Workspaces)开箱即用。 Bun从您的 package.json 中读取workspaces 的键值,并为您的整个 monorepo 安装依赖项。

全局安装缓存

下载一次,随处安装。 Bun 只从 npm 下载特定版本的包一次;以后的安装将从缓存中复制它。

二进制lockfile

在依赖安装后,Bun 将创建一个二进制 bun.lockb 这样代表每个依赖项的已分析版本的lockfile(锁定文件)。二进制格式使得读取和解析速度比基于 JSON 或 Yaml 的lockfile快得多。

熟悉的API

Bun 的 CLI 使用的命令和选项对于 npm, pnpm, 或者 yarn 的任何用户来说都会感到熟悉。

立即替换您项目流程中的 yarn 变为 bun install 去感受30倍的包安装效率提升!

$ bun test

Bun 引领卓越测试体验,一骑绝尘

Bun

Vitest

5x slower

Jest+SWC

8x slower

Jest+tsjest

18x slower

Jest+Babel

20x slower

Zod项目运行测试套件
查看基准测试

兼容 Jest 的语法

Bun 提供了 Jest 风格的 expect() API。切换到 bun test 不用更改您原先的代码。

难以置信的快

Bun 的快速启动时间在测试运行程序中表现出色。您将难以想象你原先的测试用例将快多少。

生命周期hooks(钩子)

使用 beforeEach/afterEach 运行每个测试用例开始阶段和结束阶段的代码,或者使用 beforeAll/afterAll 运行每个文件开始阶段和结束阶段的代码。

快照测试

完全支持使用 .toMatchSnapshot() 进行持久化快照测试。 使用 --update-snapshots 选项覆盖快照。

DOM APIs

使用 happy-dom 在测试中模拟 DOM 和浏览器 API。

监视模式

Bun的瞬时监视模式可以使用 --watch 选项使当文件发生变更时去重新运行测试用例。

函数模拟

mock() 模拟函数,或者用 spyOn() 监听方法执行。

立即替换您项目流程中的 jest 变为 bun test 去获得10-30倍的测试用例执行效率提升!

1

安装Bun

curl -fsSL https://bun.sh.cn/install | bash

2

编写代码

index.tsx
const server = Bun.serve({
  port: 3000,
  fetch(request) {
    return new Response("Welcome to Bun!");
  },
});

console.log(`Listening on localhost:${server.port}`);

3

启动

bun index.tsx

从小例子开始您的 Bun 之旅

我们的指南详细介绍了如何使用 Bun 执行常见任务。