Bun
概述
Bun 是一个一体化 JavaScript/TypeScript 运行时,用一个二进制文件取代了 Node.js、npm、webpack 和 Jest。它提供了原生的 TypeScript 支持、高性能 HTTP 服务器(Bun.serve())、快速包管理器、打包器以及兼容 Jest 的测试运行器,性能显著提升。
指令
- 创建 HTTP 服务器时,使用
Bun.serve(),它支持每秒 10 万以上请求,并内置 WebSocket 支持、TLS 和流式响应。 - 管理包时,使用
bun install(比 npm 快 10-30 倍)、bun add、bun remove,并优先使用bun.lock(文本格式)以获得可读的 git 差异。 - 打包时,使用
Bun.build()并设置适当的目标("browser"、"bun"、"node"),通过splitting: true启用代码分割,并配置摇树优化。 - 编写测试时,使用
bun test和兼容 Jest 的 API(describe、it、expect)、快照测试、使用mock.module()进行模拟,以及使用--coverage进行代码覆盖率。 - 进行文件 I/O 时,优先使用
Bun.file()和Bun.write()而非 Node.js 的fs,以获得显著更快的文件操作,并使用Bun.Glob进行模式匹配。 - 处理身份验证时,使用
Bun.password.hash()和Bun.password.verify()进行 bcrypt/argon2 加密,而非 npm 包。 - 从 Node.js 迁移时,将脚本中的
node替换为bun,保持package.json不变,并注意大多数 npm 包无需修改即可工作。使用bun:sqlite作为嵌入式数据库,而非 SQLite npm 包。
示例
示例 1:构建高性能 API 服务器
用户请求:“使用 Bun 内置的 HTTP 服务器创建一个 REST API”
操作:
- 使用
Bun.serve()创建服务器和路由处理程序 - 使用
request.json()解析 JSON 体并返回Response对象 - 添加 WebSocket 升级以实现实时功能
- 使用
Bun.password进行身份验证,使用bun:sqlite进行数据存储
**输出:**一个仅使用 Bun 内建功能且无外部依赖的快速 API 服务器。
示例 2:将 Node.js 项目迁移到 Bun
用户请求:“将我的 Express 项目从 Node.js 切换到 Bun”
操作:
- 在 CI 和本地设置中将
npm install替换为bun install - 更新
package.json脚本,使用bun run而非node - 用 Bun 内置的
.env加载替换dotenv - 将测试运行器从 Jest 切换到
bun test,测试文件保持不变
**输出:**一个由 Bun 驱动的项目,具有更快的安装、启动和测试执行速度。
指南
- 对于新的 HTTP 服务器,使用
Bun.serve();它在 Bun 上明显快于 Express。 - 对于文件操作,优先使用
Bun.file()和Bun.write()而非 Node.js 的fs。 - 对于本地数据,使用
bun:sqlite而非添加 SQLite npm 包。 - 对于身份验证,使用
Bun.password而非bcrypt/argon2npm 包,以实现零原生依赖。 - 将
bun.lock(文本格式)保存在 git 中,以获得可读的差异。 - 使用
bun test替代 Jest 进行测试,API 相同但执行速度显著更快。 - 当目标为浏览器时,使用
Bun.build()并设置target: "browser"。