Bun.version
一个 string,包含当前运行的 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 位计数器的高位保持清零,因此在翻转前至少还有 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
转义输入字符串中的以下字符:
"变为"&变为&'变为'<变为<>变为>
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)是 10 亿分之一秒。单位换算:
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()
将对象序列化为与 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。