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

兼容性

Bun 的 YAML 解析器使用 Rust 编写,通过了官方 YAML 测试套件中超过 90% 的测试,涵盖了绝大多数实际使用场景。我们正努力实现 100% 的规范兼容性。

运行时 API

Bun.YAML.parse()

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

多文档 YAML

解析由多个文档(用 --- 分隔)构成的 YAML 时,Bun.YAML.parse() 返回一个数组:

支持的 YAML 特性

Bun 的 YAML 解析器支持完整的 YAML 1.2 规范,包括:
  • 标量:字符串、数字、布尔值、null 值
  • 集合:序列(数组)和映射(对象)
  • 锚点与别名:使用 &* 的可复用节点
  • 标签:类型提示,如 !!str!!int!!float!!bool!!null
  • 多行字符串:文字块 (|) 和折叠块 (>) 标量
  • 注释:使用 #
  • 指令%YAML%TAG

错误处理

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

模块导入

ES 模块

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

默认导入

app.ts

命名导入

顶层 YAML 属性可作为命名导入使用:
app.ts
或者两者结合:
app.ts

CommonJS

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

YAML 热重载

当你使用 bun --hot 运行应用程序时,Bun 会检测 YAML 文件的更改,并在不关闭连接的情况下重新加载它们。

配置热重载示例

config.yaml
server.ts
使用热重载运行:
terminal
现在,当你修改 config.yaml 时,正在运行的应用程序会获取更改:你可以在开发过程中调整设置或切换功能标志,而无需重启应用程序。

配置管理

基于环境的配置

一个 YAML 文件可以保存多个环境的配置,并通过锚点共享默认值:
config.yaml
app.ts

功能标志配置

features.yaml
feature-flags.ts

数据库配置

database.yaml
db.ts

打包器集成

当你打包导入 YAML 文件的应用程序时,Bun 会在构建时解析 YAML,并将其作为 JavaScript 模块包含在内:
terminal
在构建时解析意味着:
  • 生产环境中无需运行时解析 YAML
  • 更小的打包体积
  • 对未使用的配置进行摇树优化(命名导入)

动态导入

动态导入 YAML 文件,按需加载配置: