Skip to main content

Bun.version

一个 string,包含当前运行的 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 位计数器的高位保持清零,因此在翻转前至少还有 2048 个值)。如果时钟尚未超过上次发出的时间戳,Bun 会重用上次发出的时间戳并递增计数器。如果计数器翻转,Bun 会向前推进发出的时间戳而不是回绕计数器,因此返回的 UUID 保持严格递增(RFC 9562 §6.2)。计数器是原子操作且线程安全的,因此在同一进程中同一时间戳下,来自多个 Worker 的 Bun.randomUUIDv7() 调用不会产生冲突的计数器值。 当你传递显式的 timestamp 时,Bun 会按原样编码该值,并为其维护独立的计数器,因此使用显式时间戳的调用不会观察或更改默认路径使用的单调状态。使用相同显式时间戳的重复调用会递增该独立计数器(并在翻转时向前推进发出的时间戳),以便它们保持可排序;使用不同显式时间戳的调用会重置它。 UUID 的最后 8 个字节是加密安全的随机值。它使用与 crypto.randomUUID() 相同的随机数生成器(来自 BoringSSL,而 BoringSSL 又来自通常由底层硬件提供的平台特定系统随机数生成器)。
传递 "buffer" 作为编码以获取 16 字节的 buffer 而不是字符串。这可以避免字符串转换开销。
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 转义输入字符串中的以下字符:
  • " 变为 "
  • & 变为 &
  • ' 变为 '
  • < 变为 &lt;
  • > 变为 &gt;
此函数针对大输入进行了优化。在 M1X 上,处理速度为 480 MB/s - 20 GB/s,具体取决于要转义的数据量以及是否包含非 ASCII 文本。非字符串类型在转义前会转换为字符串。

Bun.stringWidth()

比 string-width 快约 6,756 倍的替代方案
获取字符串在终端中显示时的列宽。支持 ANSI 转义码、emoji 和宽字符。 用法示例:
使用它来对齐终端中的文本,或检查字符串是否包含 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)是 10 亿分之一秒。单位换算:
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()

将对象序列化为与 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

Bun.wrapAnsi()

wrap-ansi npm 包的即插即用替代方案
Bun.wrapAnsi(input: string, columns: number, options?: WrapAnsiOptions): string 将文本换行到指定的列宽。它保留 ANSI 转义码和超链接,并正确处理 Unicode/emoji 宽度。这是 wrap-ansi npm 包的原生替代方案。

选项

TypeScript 定义:

bun:jsc 中的 serialize 和 deserialize

要将 JavaScript 值保存到 SharedArrayBuffer 并恢复,使用 "bun:jsc" 模块中的 serialize 和 deserialize。
在内部,structuredClone 和 postMessage 以相同的方式序列化和反序列化。这将以 SharedArrayBuffer 的形式向 JavaScript 公开底层的 HTML Structured Clone 算法。

bun:jsc 中的 estimateShallowMemoryUsageOf

estimateShallowMemoryUsageOf 函数以字节为单位返回对象内存使用的最佳估算值,不包括其属性或其他引用对象的内存使用。要获取精确的按对象内存使用量,请使用 Bun.generateHeapSnapshot。