Skip to main content

Bun.version

包含当前正在运行的 bun CLI 版本的字符串。
terminal

Bun.revision

用于构建当前 bun CLI 的 Bun 的 git 提交哈希值。
terminal

Bun.env

process.env 的别名。

Bun.main

当前程序入口文件的绝对路径(用 bun run 执行的文件)。
script.ts
使用此属性可以判断脚本是否被直接执行,而不是被其他脚本导入。
这类似于 Node.js 中的 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
默认情况下,Bun 会查看当前的 PATH 环境变量。要自定义 PATH
传入 cwd 选项,可从特定目录中解析可执行文件。
这是 which npm 包的内置替代方案。

Bun.randomUUIDv7()

Bun.randomUUIDv7() 生成一个 UUID v7,它具有单调性,适合排序和数据库使用。
UUID v7 是一个 128 位值,编码了当前时间戳、随机值和计数器。时间戳用最低 48 位编码,随机值和计数器编码于剩余位。 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
还支持 base64base64url 编码,以获得更短的字符串。
base64.ts

Bun.peek()

Bun.peek(prom: Promise) 读取 Promise 的结果而无须 await.then,前提是 Promise 已经完成或拒绝。
在对性能敏感的代码中使用它来避免多余的微任务。这是一个高级 API;在生产环境中使用前,请先查看以下示例。
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 转义输入字符串中的以下字符:
  • " 转为 "
  • & 转为 &
  • ' 转为 '
  • < 转为 &lt;
  • > 转为 &gt;
此函数针对大型输入进行了优化。在 M1X 上,其处理速度为 480 MB/s - 20 GB/s,具体取决于需要转义的数据量以及是否包含非 ASCII 文本。非字符串类型会在转义前转换为字符串。

Bun.stringWidth()

大约比 string-width 快 6,756 倍的替代方案
获取字符串在终端显示时占用列数。支持 ANSI 转义码、表情符号和宽字符。 示例:
用于在终端中对齐文本,或检查字符串是否包含 ANSI 转义码。 该 API 与 “string-width” npm 包保持一致,因此现有代码可以在 Bun 和该 npm 包之间相互迁移。 此基准测试中,对于长度大于约 500 个字符的输入,Bun.stringWidthstring-width npm 包快约 6,756 倍。非常感谢 sindresorhusstring-width 方面所做的工作。
Bun.stringWidth 使用原生代码和 SIMD 指令实现,并支持 Latin1、UTF-16 和 UTF-8 编码。它通过了 string-width 的测试。
1 纳秒(ns)是十亿分之一秒。单位换算如下:
terminal
terminal
TypeScript 定义:

Bun.fileURLToPath()

file:// URL 转换成绝对路径。

Bun.pathToFileURL()

将绝对路径转换成 file:// URL。

Bun.gzipSync()

使用 zlib 的 GZIP 算法压缩 Uint8Array
可选传入配置参数:

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.stripANSIstrip-ansi npm 包更快:
terminal
terminal

serializedeserialize 来自 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" 模块中的 serializedeserialize
在内部,structuredClonepostMessage 以相同的方式进行序列化和反序列化。这将底层的 HTML 结构化克隆算法 作为 SharedArrayBuffer 暴露给 JavaScript。

estimateShallowMemoryUsageOf 来自 bun:jsc

estimateShallowMemoryUsageOf 函数返回对象的浅层内存占用估计,单位是字节,不包括其属性或引用对象的内存。要准确测量单个对象的内存,推荐使用 Bun.generateHeapSnapshot