关于 bun-file-io
这项开发技能说明在 `packages/opencode` 中使用 Bun 处理文件读写与扫描的约定,帮助贡献者选择文件、目录、扫描和外部进程相关 API。
主要功能
- 01Bun 文件读写方式
- 02使用 Bun.Glob 扫描文件
- 03使用 node:fs/promises 操作目录
- 04使用 Bun.which 和 Bun.spawn 运行外部工具
- 05解码流输出的指引
适用场景
- 01修改 `packages/opencode` 中的文件 I/O
- 02扫描文件与目录
- 03读取二进制或大型文件
- 04运行外部工具并处理输出
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ anomalyco/ opencode --skill bun-file-io安装后在 Claude Code 中输入/bun-file-io确认已加载。
详细介绍
适用场景
- 编辑
packages/opencode中的文件 I/O 或扫描逻辑 - 处理目录操作或外部工具
Bun 文件 API(来自 Bun 文档)
Bun.file(path)是惰性的;调用text、json、stream、arrayBuffer、bytes、exists进行读取。- 元数据:
file.size、file.type、file.name。 Bun.write(dest, input)可写入字符串、缓冲区、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处理流输出。
何时使用 node:fs
- 对目录操作(
mkdir、readdir、递归操作)使用node:fs/promises。
仓库规范
- 文件访问优先使用 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.file(...).exists() 将返回 false。
如果路径可能是文件或目录,请改用 Filesystem.exists(...)
快速检查清单
- 优先使用 Bun API。
- 使用
path.join/path.resolve处理路径。 - 尽可能优先使用 Promise 的
.catch(...),而非try/catch。
评论
支持 Markdown