Bun.version
包含当前正在运行的 bun CLI 版本的字符串。
terminal
Bun.revision
用于构建当前 bun CLI 的 Bun 的 git 提交哈希值。
terminal
Bun.env
process.env 的别名。
Bun.main
当前程序入口文件的绝对路径(用 bun run 执行的文件)。
script.ts
require.main = module 技巧。
Bun.sleep()
Bun.sleep(ms: number)
返回一个在指定毫秒后完成的 Promise。
Date 对象,返回在该时间点完成的 Promise。
Bun.sleepSync()
Bun.sleepSync(ms: number)
同步阻塞版本的 Bun.sleep。
Bun.which()
Bun.which(bin: string)
返回可执行文件的路径,类似于终端中输入 which。
PATH 环境变量。要自定义 PATH:
cwd 选项,可从特定目录中解析可执行文件。
which npm 包的内置替代方案。
Bun.randomUUIDv7()
Bun.randomUUIDv7() 生成一个 UUID v7,它具有单调性,适合排序和数据库使用。
timestamp 参数默认为当前的毫秒级时间。当时钟向前移动时,计数器会重新初始化为一个新的伪随机整数(12 位计数器的最高位保持为 0,因此在回绕前至少还剩 2048 个值)。如果时钟没有超过上一次生成 UUID 时的时间戳,Bun 会复用上一次生成的时间戳并递增计数器。如果计数器发生回绕,Bun 会将生成的时间戳向前推进,而不是让计数器回绕,从而确保返回的 UUID 始终严格递增(RFC 9562 §6.2)。计数器具有原子性且支持线程安全,因此在同一进程中、同一时间戳下从多个 Worker 调用 Bun.randomUUIDv7() 不会产生冲突的计数器值。
当传入显式的 timestamp 时,Bun 会原样编码该值,并为其维护一个独立的计数器,因此使用显式时间戳的调用不会读取或修改默认路径使用的单调状态。使用相同显式时间戳的重复调用会递增该独立计数器(并在回绕时推进生成的时间戳),因此它们仍可排序;使用不同显式时间戳的调用会重新初始化该计数器。
UUID 的后 8 字节为加密安全的随机值,使用与 crypto.randomUUID() 相同的随机数生成器(基于 BoringSSL,底层依赖硬件随机数生成器)。
"buffer" 作为编码传入,即可获取一个 16 字节的缓冲区,而不是字符串。这样可以避免字符串转换开销。
buffer.ts
base64 和 base64url 编码,以获得更短的字符串。
base64.ts
Bun.peek()
Bun.peek(prom: Promise)
读取 Promise 的结果而无须 await 或 .then,前提是 Promise 已经完成或拒绝。
peek.status 读取 Promise 的状态,而不会解析它。
Bun.openInEditor()
在默认编辑器中打开文件。Bun 会根据 $VISUAL 或 $EDITOR 环境变量自动检测编辑器。
bunfig.toml 中的 debug.editor 设置覆盖此行为。
bunfig.toml
editor 参数指定编辑器,并指定行列号。
Bun.deepEquals()
递归检查两个对象是否等价。bun:test 中的 expect().toEqual() 内部使用了这个方法。
expect().toStrictEqual() 使用这个模式。
Bun.escapeHTML()
Bun.escapeHTML(value: string | object | number | boolean): string
转义输入字符串中的以下字符:
"转为"&转为&'转为'<转为<>转为>
Bun.stringWidth()
大约比
string-width 快 6,756 倍的替代方案Bun.stringWidth 比 string-width npm 包快约 6,756 倍。非常感谢 sindresorhus 在 string-width 方面所做的工作。
Bun.stringWidth 使用原生代码和 SIMD 指令实现,并支持 Latin1、UTF-16 和 UTF-8 编码。它通过了 string-width 的测试。
查看完整基准测试
查看完整基准测试
1 纳秒(ns)是十亿分之一秒。单位换算如下:
terminal
terminal
Bun.fileURLToPath()
将 file:// URL 转换成绝对路径。
Bun.pathToFileURL()
将绝对路径转换成 file:// URL。
Bun.gzipSync()
使用 zlib 的 GZIP 算法压缩 Uint8Array。
zlib 压缩选项
zlib 压缩选项
Bun.gunzipSync()
使用 zlib 的 GUNZIP 算法解压 Uint8Array。
Bun.deflateSync()
使用 zlib 的 DEFLATE 算法压缩 Uint8Array。
Bun.gzipSync 相同的配置选项。
Bun.inflateSync()
使用 zlib 的 INFLATE 算法解压 Uint8Array。
Bun.zstdCompress() / Bun.zstdCompressSync()
使用 Zstandard 算法压缩 Uint8Array。
Bun.zstdDecompress() / Bun.zstdDecompressSync()
使用 Zstandard 算法解压 Uint8Array。
Bun.inspect()
将对象序列化为 string,格式与 console.log 打印一致。
Bun.inspect.custom
Bun 用于实现 Bun.inspect 的符号。重写它可以自定义对象的打印方式。它与 Node.js 中的 util.inspect.custom 完全相同。
Bun.inspect.table(tabularData, properties, options)
将表格数据格式化为字符串。类似 console.table,但返回字符串而非打印。
{ colors: true } 以启用 ANSI 颜色。
Bun.nanoseconds()
返回当前 bun 进程启动以来的纳秒数(number 类型)。适合高精度计时和基准测试。
Bun.readableStreamTo*()
Bun 实现了一组方便函数,可异步消费 ReadableStream 的内容并转换成各种二进制格式。
Bun.resolveSync()
使用 Bun 内部的模块解析算法解析文件路径或模块说明符。第一个参数是要解析的路径,第二个参数是“根目录”。如果未找到匹配项,则会抛出一个 Error。
process.cwd() 或 "."。
import.meta.dir。
Bun.stripANSI()
性能比
strip-ansi 快约 6-57 倍Bun.stripANSI(text: string): string
从字符串中移除 ANSI 转义码。可用于移除终端输出中的颜色和格式。
Bun.stripANSI 比 strip-ansi npm 包更快:
terminal
terminal
serialize 和 deserialize 来自 bun:jsc
可直接替代
wrap-ansi npm 包Bun.wrapAnsi(input: string, columns: number, options?: WrapAnsiOptions): string
将文本换行至指定的列宽。它会保留 ANSI 转义码和超链接,并正确处理 Unicode/表情符号的宽度。这是 wrap-ansi npm 包的原生替代方案。
选项
TypeScript 定义:
serialize & deserialize in bun:jsc
要将 JavaScript 值保存到 SharedArrayBuffer 中并取回,请使用 "bun:jsc" 模块中的 serialize 和 deserialize。
structuredClone 和 postMessage 以相同的方式进行序列化和反序列化。这将底层的 HTML 结构化克隆算法 作为 SharedArrayBuffer 暴露给 JavaScript。
estimateShallowMemoryUsageOf 来自 bun:jsc
estimateShallowMemoryUsageOf 函数返回对象的浅层内存占用估计,单位是字节,不包括其属性或引用对象的内存。要准确测量单个对象的内存,推荐使用 Bun.generateHeapSnapshot。