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 参数默认为当前时间(以毫秒为单位)。当时钟前进时,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 已经完成或拒绝。
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 的符号。重写它可自定义 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。