SuperAPI AI 工具集

bun-runtime

编程与开发

查看项目

更新于 10-15 10:58

技能介绍

Bun 是一个集 JavaScript/TypeScript 运行时、包管理器、打包器和测试运行器于一体的工具。

运行时

Bun 可直接运行 .ts、.tsx、.js 和 .jsx 文件,无需编译步骤或 tsconfig。常用命令包括:bun run index.ts 运行文件;bun --watch run server.ts 在文件变化时重启;bun --hot run server.ts 进行保留状态的热重载。

包管理

使用二进制锁文件 bun.lockb,应将其提交到版本控制。常用命令:bun install 安装所有依赖;bun add express 添加依赖;bun add -d typescript @types/node 添加开发依赖;bun add -g serve 全局安装;bun remove express 移除依赖;bun update 更新依赖。默认不运行 postinstall 脚本,可在 package.json 中通过 trustedDependencies 允许特定包(如 sharp、esbuild),或运行 bun install --trust 允许全部。

运行脚本

bun run dev 运行 package.json 脚本;bun dev 为同义简写;bunx cowsay hello 运行一次性二进制(类似 npx);bun --env-file=.env.local run app.ts 使用自定义环境文件。

Bun Shell

通过 $ 标签模板提供跨平台 shell,支持 macOS、Linux 和 Windows。示例包括 await $ls -la.text() 取文本输出、安全插值 await $ls ${dir}、重定向 await $echo "hello" > output.txt、quiet() 抑制 stdout、nothrow() 失败不抛出、以及通过 lines() 流式读取行。

内置测试运行器

使用 bun:test,语法与 Jest 兼容。命令:bun test 运行全部;bun test auth.test.ts 运行指定文件;bun test --grep "login" 按模式过滤;bun test --watch 监视模式;bun test --coverage 覆盖率报告;bun test --update-snapshots 更新快照。可从 bun:test 导入 test、expect、describe、mock、spyOn。支持 mock 函数、mock.module 模块模拟和 toMatchSnapshot 快照。

内置打包器

使用 bun build 打包,可指定 --target browser、--target node 或 --target bun,并可将 CLI 编译为独立二进制(--compile --outfile mycli),支持 --minify。程序化 API 为 Bun.build,可配置 entrypoints、outdir、target、minify、splitting、sourcemap,并检查 result.success 与 result.logs。

HTTP 服务器与 WebSocket

Bun.serve 可创建 HTTP 服务器,配置 port、async fetch(req)、error(error)。WebSocket 通过 server.upgrade(req) 与 websocket 的 open/message/close 回调支持。

文件 I/O

Bun.file 和 Bun.write 是针对 node:fs 的优化替代。可读取 text、json、exists,查看 size 与 type;可写入字符串、JSON 或直接复制文件,也可将 fetch 响应直接写入磁盘。

内置 SQLite

从 bun:sqlite 导入 Database。支持创建表、prepare 预编译语句、run 插入、all 查询、transaction 事务批量写入以及 db.close()。

环境变量

Bun 自动加载 .env 文件,无需 dotenv 包。可用 Bun.env.PORT 或 process.env.SECRET_KEY 读取。加载顺序(后者覆盖前者):.env < .env.local < .env.${NODE_ENV} < .env.${NODE_ENV}.local < 实际环境。可用 bun --env-file=.env.staging run server.ts 指定自定义环境文件。

Node.js 兼容性

可用模块包括 node:fs、node:path、node:os、node:crypto、node:buffer、node:http、node:https、node:stream、node:events、node:util、node:child_process、node:worker_threads 等;支持 CJS/ESM 互操作,ESM 中可用 __dirname 和 __filename,支持 NAPI 原生插件。已知缺口:node:vm(有限)、node:dgram(部分)、node:inspector(不支持)、node:http2(部分)、node:cluster(不支持),部分原生插件可能无法工作。详见官方文档。

从 npm/yarn/pnpm 迁移

删除旧锁文件(package-lock.json、yarn.lock、pnpm-lock.yaml),运行 bun install 生成 bun.lockb;在脚本中将 npx 替换为 bunx,node 替换为 bun;更新 CI/CD(如 GitHub Actions 使用 oven-sh/setup-bun@v2,然后 bun install、bun test、bun run build)。运行 bun test 并修复因不支持的 Node.js API 导致的失败,特定脚本仍可使用 node。

工作区

在 package.json 中配置 workspaces 数组(如 packages/、apps/)。bun install 安装全部工作区依赖;bun run --filter '@myorg/api' dev 运行指定工作区脚本;bun add zod --filter '@myorg/api' 为指定工作区添加依赖。

常见模式

API 服务器:Bun.serve 结合 bun:sqlite 查询并返回 Response.json。CLI 工具:通过 Bun.argv 读取命令,可编译为独立二进制。脚本运行器:使用 $ 执行 bun test、bun run build、docker build 等命令,以 bun run scripts/deploy.ts 运行。

限制

资料中列出的 Node.js API 缺口和部分原生插件兼容性问题需要留意;其他未在资料中明确的能力、收费、价格或平台信息暂未提供。