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 参数默认为当前时间(以毫秒为单位)。当时钟前进时,Bun 会将计数器重新设定为一个新的伪随机整数。Bun 在重新设定计数器时会将其 12 位中的最高位清零,因此在回绕之前至少还剩 2048 个值。如果时钟尚未前进到超过上次发出的时间戳,Bun 会重用上次发出的时间戳并递增计数器。如果计数器回绕,Bun 会将发出的时间戳向前推进,而不是让计数器回绕,因此返回的 UUID 会保持严格递增(RFC 9562 §6.2)。计数器是原子操作且线程安全的,因此同一进程中多个 Worker 在同一时间戳下调用 Bun.randomUUIDv7() 时,不会产生冲突的计数器值。 传入显式的 timestamp 时,Bun 会原样编码该值,并为其跟踪单独的计数器,因此显式时间戳调用不会观察或更改默认路径使用的单调状态。使用相同的显式时间戳重复调用时,会递增该独立计数器;计数器回绕时,也会向前推进发出的时间戳,因此生成的 UUID 始终可排序。使用不同的显式时间戳调用时,会重新设定该计数器。 UUID 的最后 8 个字节(除两个变体位外)是一个密码学安全的随机值。Bun.randomUUIDv7() 使用与 crypto.randomUUID() 相同的随机数生成器。该生成器来自 BoringSSL。BoringSSL 的随机性则来自平台专用的系统随机数生成器,而底层硬件通常会提供该生成器。
将 "buffer" 作为编码传入,即可获取一个 16 字节的缓冲区,而不是字符串。这样可以避免字符串转换开销。
buffer.ts
还支持 base64 和 base64url 编码,以获得更短的字符串。
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 会将以下情况视为不相等:

Bun.escapeHTML()

Bun.escapeHTML(value: string | object | number | boolean): string 转义输入字符串中的以下字符:
  • " 转为 "
  • & 转为 &
  • ' 转为 '
  • < 转为 &lt;
  • > 转为 &gt;
此函数针对大型输入进行了优化。在 M1 Max 上,其处理速度为 480 MB/s 至 20 GB/s,具体取决于要转义的数据量以及是否包含非 ASCII 文本。Bun 会先将非字符串类型转换为字符串,再进行转义。

Bun.stringWidth()

大约比 string-width 快 6,756 倍的替代方案
获取字符串在终端中显示时所占的列数。支持 ANSI 转义码、表情符号和宽字符。 示例:
用于在终端中对齐文本,或检查字符串是否包含 ANSI 转义码。 此 API 与 “string-width” npm 包相同,因此你可以将现有代码移植到 Bun,反之亦然。 在此基准测试中,对于长度大于约 500 个字符的输入,Bun.stringWidth 比 string-width npm 包快约 6,756 倍。非常感谢 sindresorhus 在 string-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 的符号。重写它可自定义 Bun 打印对象的方式。它与 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 来自 bun:jsc

要将 JavaScript 值保存到 SharedArrayBuffer 中并取回,请使用 "bun:jsc" 模块中的 serialize 和 deserialize。
在内部,structuredClone 和 postMessage 使用相同的方式进行序列化和反序列化。serialize 和 deserialize 将底层的 HTML 结构化克隆算法作为 SharedArrayBuffer 暴露给 JavaScript。

estimateShallowMemoryUsageOf 来自 bun:jsc

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