Bun
概述
Bun 是一个集 JavaScript/TypeScript 运行时、包管理器、打包器和测试运行器于一体的全能工具,旨在用单个二进制文件替代 Node.js、npm、webpack 和 Jest。它原生支持 TypeScript,内置高性能 HTTP 服务器(Bun.serve())、速度更快的包管理器、打包器,以及兼容 Jest 的测试运行器,性能有显著提升。
用途与主要能力
Bun 覆盖 JavaScript/TypeScript 项目的多个核心环节:
- HTTP 服务器:使用 Bun.serve() 创建 HTTP 服务器,内置 WebSocket 支持、TLS 和流式响应,可处理每秒 100K+ 请求。
- 包管理:使用 bun install(资料称比 npm 快 10-30 倍)、bun add、bun remove 管理依赖,并用 bun.lock(文本格式)保证 git diff 可读。
- 打包:使用 Bun.build() 并指定合适的 target("browser"、"bun"、"node"),通过 splitting: true 启用代码分割,并配置 tree shaking。
- 测试:使用 bun test,提供兼容 Jest 的 API(describe、it、expect)、快照测试、通过 mock.module() 进行 mock,以及用 --coverage 查看代码覆盖率。
- 文件 I/O:使用 Bun.file() 和 Bun.write() 替代 Node.js fs 以获得更快的文件操作,并用 Bun.Glob 进行模式匹配。
- 认证:使用 Bun.password.hash() 和 Bun.password.verify() 处理 bcrypt/argon2,替代相应的 npm 包。
- 数据库:使用 bun:sqlite 作为内嵌数据库,替代 SQLite 的 npm 包。
使用方式
资料给出的使用要点包括:
- 创建 HTTP 服务器时使用 Bun.serve() 配合路由处理器;用 request.json() 解析 JSON 请求体并返回 Response 对象;可加入 WebSocket 升级以支持实时功能;用 Bun.password 做认证、用 bun:sqlite 存储数据。
- 管理包时使用 bun install、bun add、bun remove,并优先使用 bun.lock 文本格式。
- 打包时使用 Bun.build(),指定 target,启用 splitting: true 并配置 tree shaking。
- 测试时使用 bun test,兼容 describe、it、expect,支持快照测试和 mock.module(),可用 --coverage 生成覆盖率。
- 文件操作优先使用 Bun.file() 和 Bun.write(),模式匹配使用 Bun.Glob。
- 认证使用 Bun.password.hash() 与 Bun.password.verify(),实现零原生依赖。
从 Node.js 迁移
资料说明:将脚本中的 node 替换为 bun,保持 package.json 不变,并注意大多数 npm 包无需修改即可工作;用 bun:sqlite 替代 SQLite npm 包。示例迁移步骤包括:在 CI 和本地用 bun install 替换 npm install;将 package.json 脚本改用 bun run 而非 node;用 Bun 内置的 .env 加载替代 dotenv;将测试运行器从 Jest 切换为 bun test,测试文件保持不变。
适用场景
- 构建高性能 API 服务器与 REST API,包括需要实时 WebSocket 的场景。
- 需要更快安装、启动和测试执行的 Node.js 项目迁移。
- 项目内的依赖管理、代码打包与测试运行。
- 需要本地嵌入式数据库、内置认证密码哈希或高频文件读写的场景。
限制
资料未提供关于平台支持范围、具体价格或收费模式、与其他运行时的完整兼容性清单等信息,相关内容暂未提供。