SuperAPI AI 工具集

bun-cloudflare-workers

部署与运维

查看项目

更新于 10-15 11:53

技能介绍

用途

该技能面向需要在 Cloudflare Workers 上使用 Bun 进行开发、测试与部署的场景。当用户询问“Cloudflare Workers with Bun”“deploying Bun to Workers”“wrangler with Bun”“edge deployment”等主题时使用。

主要能力

  • 项目脚手架与依赖安装:使用 bunx create-cloudflare my-worker 创建 Workers 项目,bun install 安装依赖。
  • 本地开发与部署:通过 bun run dev(即 wrangler dev)本地开发,bun run deploy(即 wrangler deploy)部署。
  • 基础 Worker 编写:提供 fetch 处理请求、返回 JSON、404 处理等示例,并定义 Env 接口。
  • 使用 Hono 框架:提供路由、D1 查询与插入的示例。
  • 存储与数据绑定:KV 读写(含 expirationTtl)、D1 查询/插入/批量事务、Durable Objects 计数器示例、R2 对象读写示例。
  • 定时任务:scheduled 处理器与 wrangler.toml 中 crons 配置示例。
  • 测试:使用 bun:test 编写单元测试,使用 Miniflare 进行集成测试。
  • 生产构建:使用 Bun.build 打包,target 设为 browser,支持压缩与 sourcemap。
  • 环境变量与密钥:[vars] 配置非敏感变量,wrangler secret put 设置密钥,并强调密钥不得写入日志。
  • 常见错误排查:Bun API 不可用、模块未找到、脚本过大、CPU 时间超限等。
  • API 兼容性说明:Workers 支持 Web API(fetch、Response、Request、URL、crypto、TextEncoder),不支持 Bun 专有 API(Bun.file、Bun.serve、bun:sqlite、bun:ffi、fs、child_process)。

使用方式

  1. 创建项目:bunx create-cloudflare my-worker,进入目录后 bun install。
  2. 配置 package.json 脚本(dev/deploy/build)与 wrangler.toml(name、main、compatibility_date、绑定、crons 等)。
  3. 编写 src/index.ts,按需引入 Hono 或使用原生 fetch 处理器。
  4. 本地开发:bun run dev 或 bunx wrangler dev。
  5. 测试:使用 bun:test 或 Miniflare。
  6. 构建与部署:bun run build.ts 后 bunx wrangler deploy。

适用场景

  • 需要在边缘环境部署 Bun 开发工作流的 Cloudflare Workers 项目。
  • 使用 KV、D1、R2、Durable Objects 等 Workers 绑定的应用。
  • 需要定时任务、环境变量与密钥管理的 Worker。
  • 需要 Bun 测试与 Miniflare 测试的 Worker 项目。

限制与安全注意事项

  • Workers 运行于 V8,仅支持 Web API,不支持 Bun 专有 API。
  • 脚本大小限制 10MB,超限需优化打包;CPU 时间超限需优化或使用队列。
  • 脚手架工具会下载并执行远程代码,建议遵循供应链安全实践:Bun 默认禁用安装后脚本,可通过 package.json 的 trustedDependencies 允许特定包;在 bunfig.toml 配置 minimumReleaseAge 设置冷却期(如等待 7 天);安装前使用 socket package score npm <pkg> 或 socket npm install <pkg> 审计。
  • 密钥不得记录到日志(wrangler tail / Logpush 会持久化日志)。
  • 完整安全配置(Socket CLI 集成、冷却期设置、锁文件校验、CI 强制)需加载 dependency-upgrade 技能。
  • 高级 KV/D1/R2 模式、队列 Worker、服务绑定需加载 references/bindings.md;打包优化、冷启动降低、缓存策略需加载 references/performance.md。