bun-runtime

bun-runtime

热门

Bun 作为运行时、包管理器、打包器和测试运行器。何时选择 Bun 而非 Node、迁移注意事项以及 Vercel 支持。

23万Star
3.5万Fork
更新于 2026/7/17
SKILL.md
readonly只读
name
bun-runtime
description

Bun 作为运行时、包管理器、打包器和测试运行器。何时选择 Bun 而非 Node、迁移注意事项以及 Vercel 支持。

Bun 运行时

Bun 是一个快速的全能 JavaScript 运行时和工具集:运行时、包管理器、打包器和测试运行器。

何时使用

  • 优先选择 Bun:用于新的 JS/TS 项目、安装/运行速度重要的脚本、使用 Bun 运行时的 Vercel 部署,以及希望使用单一工具链(运行 + 安装 + 测试 + 构建)时。
  • 优先选择 Node:用于最大生态系统兼容性、依赖 Node 的旧工具,或当某个依赖已知在 Bun 上有问题时。

在以下场景使用:采用 Bun、从 Node 迁移、编写或调试 Bun 脚本/测试、在 Vercel 或其他平台上配置 Bun。

工作原理

  • 运行时:即插即用的 Node 兼容运行时(基于 JavaScriptCore,用 Zig 实现)。
  • 包管理器bun install 比 npm/yarn 快得多。当前 Bun 默认锁文件为 bun.lock(文本);旧版本使用 bun.lockb(二进制)。
  • 打包器:内置打包器和转译器,用于应用和库。
  • 测试运行器:内置 bun test,提供类似 Jest 的 API。

从 Node 迁移:将 node script.js 替换为 bun run script.jsbun script.js。用 bun install 替代 npm install;大多数包都能工作。使用 bun run 运行 npm 脚本;bun x 用于 npx 风格的一次性运行。支持 Node 内置模块;如果存在 Bun API,优先使用以获得更好性能。

Vercel:在项目设置中将运行时设置为 Bun。构建:bun run buildbun build ./src/index.ts --outdir=dist。安装:bun install --frozen-lockfile 以实现可重现的部署。

示例

运行和安装

# 安装依赖(创建/更新 bun.lock 或 bun.lockb)
bun install

# 运行脚本或文件
bun run dev
bun run src/index.ts
bun src/index.ts

脚本和环境变量

bun run --env-file=.env dev
FOO=bar bun run script.ts

测试

bun test
bun test --watch
// test/example.test.ts
import { expect, test } from "bun:test";

test("add", () => {
  expect(1 + 2).toBe(3);
});

运行时 API

const file = Bun.file("package.json");
const json = await file.json();

Bun.serve({
  port: 3000,
  fetch(req) {
    return new Response("Hello");
  },
});

最佳实践

  • 提交锁文件(bun.lockbun.lockb)以实现可重现的安装。
  • 优先使用 bun run 运行脚本。对于 TypeScript,Bun 原生运行 .ts 文件。
  • 保持依赖更新;Bun 及其生态系统发展迅速。