用途
bun-file-io 用于在涉及文件操作时提供统一的实现参考,典型场景包括:在 packages/opencode 中编辑文件 I/O 或扫描逻辑、处理目录操作或调用外部工具。它的目标是把 Bun 提供的文件 API 与仓库内既有模式集中说明,便于在读写、扫描、删除文件时保持一致做法。
主要能力
该技能围绕 Bun 的文件 API 展开,覆盖以下能力:
- 读取:Bun.file(path) 是惰性的,需要调用 text、json、stream、arrayBuffer、bytes、exists 等方法才会真正读取。
- 元数据:可通过 file.size、file.type、file.name 获取文件大小、类型与名称。
- 写入:Bun.write(dest, input) 支持写入字符串、buffer、Blob、Response 或文件。
- 删除:Bun.file(...).delete() 用于删除文件。
- 增量写入:file.writer() 返回 FileSink,用于逐步写入。
- 扫描:Bun.Glob 配合 Array.fromAsync(glob.scan({ cwd, absolute, onlyFiles, dot })) 完成目录扫描。
- 外部工具:使用 Bun.which 查找二进制,再用 Bun.spawn 运行它。
- 流输出:Bun.readableStreamToText/Bytes/JSON 用于处理流式输出。
使用方式
技能中给出的仓库模式包括:优先使用 Bun API 而非 Node fs 进行文件访问;读取前先用 Bun.file(...).exists() 检查;对二进制或大文件使用 arrayBuffer(),并通过 file.type 做 MIME 检查;扫描使用 Bun.Glob 加 Array.fromAsync;用 Bun.readableStreamToText 解码工具 stderr;大文件写入使用 Bun.write(Bun.file(path), text)。
快速检查清单为:优先使用 Bun API;路径使用 path.join/path.resolve;在可能的情况下优先使用 promise 的 .catch(...) 而不是 try/catch。
何时使用 node:fs
当需要处理目录相关操作时,例如 mkdir、readdir 以及递归操作,应使用 node:fs/promises。
适用场景与限制
该技能适用于以 Bun 运行时为基础、需要统一文件读写与扫描模式的代码库,尤其是 packages/opencode 相关改动。其内容为 API 与模式说明,未提供具体的安装命令、版本要求、性能数据或收费信息,这些事实暂未提供。