- 使用
Bun.TOML.parse解析 TOML 字符串 - 在运行时将 TOML 文件作为模块进行
import和require(包括热重载和监视模式支持) - 在前端应用中使用 Bun 的打包器
import和requireTOML 文件
运行时 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))会抛出异常 - 浮点数:包括
inf和nan - 布尔值:
true和false - 日期/时间:带偏移量的日期时间、本地日期时间、本地日期和本地时间,会以源文本字符串的形式返回
- 数组:包括混合类型数组和嵌套数组
- 表:标准表(
[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]] 部分:
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(命名导入)