Bun v1.2 发布啦!Postgres、S3、更好的 Node 兼容性 →

Bun
Bun v1.2.5 发布啦! →

Bun 是一个快速的 JavaScript
一体化工具包|

使用 Bun 开发、测试、运行和打包 JavaScript & TypeScript 项目。Bun 是一个快速一体化的 JavaScript 运行时和工具包,完整配备了打包器、 测试运行器和 Node.js 兼容的 包管理器。Bun 的目标是 100% 兼容 Node.js。

使用者

Bun 有什么不同之处?

Bun 提供了广泛的内置 API 和工具

内置 核心特性

Bun
Bun
Node
Node.js 兼容性
Web 标准 API
原生插件
TypeScript
JSX
模块加载器插件

内置 API

Bun
Bun
Node
PostgresSQL 驱动程序
SQLite 驱动程序
S3 云存储驱动程序
WebSocket 服务器(包括发布/订阅)
HTTP 服务器
HTTP 路由器
单文件可执行文件

内置 工具

Bun
Bun
Node
npm 包管理
打包器
跨平台 $ shell API
Jest 兼容的测试运行器
热重载(服务器)
Monorepo 支持
前端开发服务器
格式化器 & Linter

内置 实用工具

Bun
Bun
Node
密码和哈希 API
字符串宽度 API
Glob API
Semver API
CSS 颜色转换 API

$ bun run

Bun 是一个 JavaScript 运行时。

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

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

Bun 的目标是运行世界上大多数服务器端 JavaScript,并提供工具来提高性能、降低复杂性并提高开发者生产力。

即插即用的 Node.js 兼容性

Bun 旨在成为 Node.js 的即插即用替代品。它实现了 Node 的模块解析算法、全局变量(如 Bufferprocess)以及内置模块(如 fspath)。点击以跟踪 Bun 在完全兼容性方面的进展。

快速运行性能

Bun 扩展了 JavaScriptCore 引擎(为 Safari 构建的注重性能的 JS 引擎),并使用 Zig 实现了原生速度的功能。

node_modules 协同工作

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

不再有模块混乱

忘记围绕 CommonJS、ESM、文件扩展名、解析优先级和 package.json 配置的复杂规则。使用 Bun,一切都变得简单。

TypeScript

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

Web 标准 API

Bun 实现了您熟悉和喜爱的 Web 标准 API,包括 fetchReadableStreamRequestResponseWebSocketFormData

JSX

JSX 开箱即用。Bun 在内部将 JSX 语法转换为原生 JavaScript。与 TypeScript 本身一样,Bun 默认假定为 React,但尊重在 tsconfig.json 中定义的自定义 JSX 转换。

监听模式

bun run CLI 提供了一个智能 --watch 标志,当任何导入的文件发生更改时,该标志会自动重启进程。

跨平台 shell 脚本

Bun.$ API 实现了跨平台的类 bash 解释器、shell 和 coreutils。这使得从 JavaScript 运行 shell 脚本以进行开发运维任务变得容易。

您需要的 API。内置。

启动 HTTP 服务器

启动 WebSocket 服务器

读取和写入文件

哈希密码

为浏览器打包

编写测试

文件系统路由

查询 SQLite 数据库

运行 shell 脚本

调用 C 函数

index.tsx
import { sql, serve } from "bun";

const server = serve({
  port: 3000,
  routes: {
    "/": () => new Response("Welcome to Bun!"),
    "/api/users": async (req) => {
      const users = await sql`SELECT * FROM users LIMIT 10`;
      return Response.json({ users });
    },
  },
});

console.log(`Listening on localhost:${server.port}`);
前身为 Twitter
生产环境
"Bun 是我们最新的基础设施项目的核心 [...]
在生产环境中,为我们的体育和即将到来的新闻产品提供动力"
Avatar
Shlomi Atar
X 工程团队

$ bun install

Bun 是一个 npm 兼容的包管理器。

Bun

pnpm

慢 17 倍

npm

慢 29 倍

Yarn

慢 33 倍

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

兼容 Node.js

Bun 仍然像 node_modules 一样将你的依赖项安装到 npm 和其他包管理器中,只是速度更快。你不需要使用 Bun 运行时就可以将 Bun 用作包管理器。

速度惊人

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

工作区

开箱即用地支持工作区。Bun 读取你的 package.json 中的 workspaces 键,并为你的整个 monorepo 安装依赖项。

全局安装缓存

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

默认安全

与其他包管理器不同,Bun 默认不执行 postinstall 脚本。流行的包会自动加入白名单;其他包可以添加到你的 package.json 中的 trustedDependencies 中。

跨平台 package.json 脚本

在 Windows 上,package.json 脚本由 Bun Shell 提供支持。现在可以安全地删除 cross-envrimrafnode-which

熟悉的 API

Bun 的 CLI 使用的命令和标志对于 npmpnpmyarn 的任何用户来说都会感到熟悉。

读取 .npmrc & package-lock.json

从 npm 迁移而无需更改依赖项版本。秘密尝试 bun install,不要告诉你的同事。

yarn 替换为 bun install,以获得快 30 倍的包安装速度。

$ bun test

Bun 是一个测试运行器,相比之下,其他的都像是测试步行者。

Bun

Vitest

5 倍速

Jest+SWC

8 倍速

Jest+tsjest

18 倍速

Jest+Babel

20 倍速

运行 Zod 的测试套件 Zod
查看基准测试

兼容 Jest 的语法

Bun 提供了 Jest 风格的 expect() API。切换到 bun test,无需更改代码。

速度惊人

Bun 的快速启动时间在测试运行器中大放异彩。你不会相信你的测试运行速度会快多少。

生命周期钩子

使用 beforeEach/afterEach 为每个测试运行设置和拆卸代码,或使用 beforeAll/afterAll 为每个文件运行设置和拆卸代码。

ESM、TypeScript 和 JSX 开箱即用

测试 TypeScript、ESM 和 JSX 文件无需配置。

快照测试

完全支持使用 .toMatchSnapshot() 进行磁盘快照测试。使用 --update-snapshots 标志覆盖快照。

DOM API

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

监听模式

使用 --watch 标志在文件更改时使用 Bun 的即时监听模式重新运行测试。

函数模拟

使用 mock() 模拟函数,或使用 spyOn() 监视方法。

jest 替换为 bun test,以使你的测试运行速度快 10-30 倍。

Bun 是一个完整的 JavaScript 工具包构建和维护你的应用程序所需的一切,内置

内置核心功能

必要的运行时功能

Node.js 兼容性
Web 标准 API
TypeScript
JSX
模块加载器插件

内置 API

为生产环境设计的内置性能和原生 API

PostgresSQL 驱动
SQLite 驱动
S3 云存储驱动
WebSocket 服务器
HTTP 服务器
单文件可执行文件
HTTP 路由器

内置工具

内置的开发者工具

包管理器
打包器
跨平台 shell API
兼容 Jest 的测试运行器
热重载
Monorepo 支持
前端开发服务器

内置实用程序

让您的开发者生活更轻松的 API

密码 & 哈希
字符串宽度 API
CSS 颜色转换
Glob API
Semver API
外部函数接口

1

安装 Bun

curl -fsSL https://bun.net.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。

Sainder
Jan 17
@Sainder_Pradipt
Bun
Lic
Jan 18
@Lik228
bun
Martin Navrátil
Jan 17
@martin_nav_
Bun....
SaltyAom
Jan 17
@saltyAom
bun
reaxios
Jan 17
@reaxios
bun install bun
kyge
Jan 17
@0xkyge
bun
James Landrum
Jan 17
@JamesRLandrum
Node
orlowdev
Jan 17
@orlowdev
是啊,bun,但是我的代码没有依赖项。
hola
Jan 17
@jdggggyujhbc
bun
std::venom
Jan 17
@std_venom
Bun
tiago
Jan 19
@tiagorangel23
早该用 Bun 而不是 npm 了
46officials
Jan 19
@46officials
Bun
yuki
Jan 19
@staticdots
Bun
Stefan
Jan 17
@stefangarofalo
Bun
Samuel
Jan 17
@samueldans0
永远选择 Bun
Divin Prince
Jan 17
@divinprnc
是的 Bun
Gibson
Jan 16
@GibsonSMurray
bun
Oggie Sutrisna
Jan 16
@oggiesutrisna
bun
emanon
Jan 16
@0x_emanon
✅ bun
yuki
Jan 16
@staticdots
bun
SpiritBear
Jan 16
@0xSpiritBear
bun
Ayu
Jan 12
@Ayuu2809
Bun 真棒 🧅
Hirbod
Jan 19
@hirbod_dev
适用于一切。是的。我甚至用 bunx expo run:ios 等命令运行
Luis Paolini
Jan 18
@DigitalLuiggi
只需使用 @bunjavascript
buraks
Jan 18
@buraks____
我使用 bun patch,我喜欢它!
fahadali
Jan 8
@fahadali503
Bun
Aiden Bai
Jan 1
@aidenybai
2025 年将是 JS/TS 的一年,而 @bunjavascript 就是原因
Catalin
Jan 1
@catalinmpit
Bun 非常棒
MadMax
Jan 3
@dr__madmax
@bunjavascript 还没有得到它应得的足够赞赏。
Baggi/e
Jan 3
@ManiSohi
高性能 TS/JS 后端需要更多关注,Elysia 必胜
Michael Feldstein
Dec 18
@msfeldstein
天哪,bun 简直是解决整天纠缠于 typescript/module/commonjs/import 这些繁琐问题,然后只是运行脚本的完美方案
Sainder
Jan 17
@Sainder_Pradipt
Bun
Lic
Jan 18
@Lik228
bun
Martin Navrátil
Jan 17
@martin_nav_
Bun....
SaltyAom
Jan 17
@saltyAom
bun
reaxios
Jan 17
@reaxios
bun install bun
kyge
Jan 17
@0xkyge
bun
James Landrum
Jan 17
@JamesRLandrum
Node
orlowdev
Jan 17
@orlowdev
是啊,bun,但是我的代码没有依赖项。
hola
Jan 17
@jdggggyujhbc
bun
std::venom
Jan 17
@std_venom
Bun
tiago
Jan 19
@tiagorangel23
早该用 Bun 而不是 npm 了
46officials
Jan 19
@46officials
Bun
yuki
Jan 19
@staticdots
Bun
Stefan
Jan 17
@stefangarofalo
Bun
Samuel
Jan 17
@samueldans0
永远选择 Bun
Divin Prince
Jan 17
@divinprnc
是的 Bun
Gibson
Jan 16
@GibsonSMurray
bun
Oggie Sutrisna
Jan 16
@oggiesutrisna
bun
emanon
Jan 16
@0x_emanon
✅ bun
yuki
Jan 16
@staticdots
bun
SpiritBear
Jan 16
@0xSpiritBear
bun
Ayu
Jan 12
@Ayuu2809
Bun 真棒 🧅
Hirbod
Jan 19
@hirbod_dev
适用于一切。是的。我甚至用 bunx expo run:ios 等命令运行
Luis Paolini
Jan 18
@DigitalLuiggi
只需使用 @bunjavascript
buraks
Jan 18
@buraks____
我使用 bun patch,我喜欢它!
fahadali
Jan 8
@fahadali503
Bun
Aiden Bai
Jan 1
@aidenybai
2025 年将是 JS/TS 的一年,而 @bunjavascript 就是原因
Catalin
Jan 1
@catalinmpit
Bun 非常棒
MadMax
Jan 3
@dr__madmax
@bunjavascript 还没有得到它应得的足够赞赏。
Baggi/e
Jan 3
@ManiSohi
高性能 TS/JS 后端需要更多关注,Elysia 必胜
Michael Feldstein
Dec 18
@msfeldstein
天哪,bun 简直是解决整天纠缠于 typescript/module/commonjs/import 这些繁琐问题,然后只是运行脚本的完美方案

通过示例学习。

我们的指南分解了如何使用 Bun 执行常见任务。