Skip to main content
在 Bun 中,TOML 与 JSON、JSON5 和 YAML 同为一等公民。你可以:
  • 使用 Bun.TOML.parse 解析 TOML 字符串
  • 在运行时将 TOML 文件作为模块进行 importrequire(包括热重载和监视模式支持)
  • 在前端应用中使用 Bun 的打包器 importrequire TOML 文件

运行时 API

Bun.TOML.parse()

将 TOML 字符串解析为 JavaScript 对象。

支持的 TOML 特性

Bun 的 TOML 解析器实现了完整的 TOML v1.1.0 规范,并通过了完整的官方 toml-test 一致性测试套件。
  • 字符串:基本字符串("...")和字面量字符串('...'),包括多行字符串,以及所有转义序列(\uHHHH\UHHHHHHHH 和 TOML 1.1 中的 \xHH\e
  • 整数:十进制、十六进制(0x)、八进制(0o)和二进制(0b)。无法无损表示为 JavaScript 数字的整数(超出 ±(2^53 - 1))会抛出异常
  • 浮点数:包括 infnan
  • 布尔值truefalse
  • 日期/时间:带偏移量的日期时间、本地日期时间、本地日期和本地时间,会以源文本字符串的形式返回
  • 数组:包括混合类型数组和嵌套数组
  • :标准表([table])和内联表({ key = "value" }),包括 TOML 1.1 多行内联表
  • 表数组[[array]]
  • 点号键a.b.c = "value"
  • 注释:使用 #

错误处理

如果 TOML 无效,Bun.TOML.parse() 会抛出 SyntaxError

Bun.TOML.stringify()

将 JavaScript 对象序列化为 TOML 文档。标量键位于前面, 随后是 [table][[array-of-tables]] 部分:
顶层值必须是对象——TOML 文档就是一个表。Date 值会转换为 TOML 带偏移量的日期时间。由于 TOML 无法表示 null 值、BigInt 和循环结构,遇到这些值时会抛出异常;undefined、 函数和符号属性会被跳过(在数组中则会抛出异常,因为 TOML 数组不能包含空位)。

模块导入

ES 模块

直接将 TOML 文件作为 ES 模块导入。Bun 会解析 TOML,并将其同时作为默认导出和命名导出提供:
config.toml

默认导入

app.ts

命名导入

你可以将顶层 TOML 表解构为命名导入:
app.ts
或者两者结合:
app.ts

导入属性

使用导入属性将任意文件作为 TOML 加载:
app.ts

CommonJS

你也可以在 CommonJS 中使用 require 导入 TOML 文件:
app.ts

TOML 热重载

当你使用 bun --hot 运行应用程序时,Bun 会检测 TOML 文件的更改,并在不重启的情况下重新加载:
config.toml
server.ts
使用热重载运行:
terminal

打包器集成

使用 Bun 进行打包时,打包器会在构建时解析导入的 TOML,并将其作为 JavaScript 模块包含在内:
terminal
这意味着:
  • 生产环境中无需承担 TOML 运行时解析开销
  • 更小的打包体积
  • 对未使用的属性进行 Tree Shaking(命名导入)

动态导入

你也可以动态导入 TOML 文件: