- 使用
Bun.YAML.parse解析 YAML 字符串 - 在运行时将 YAML 文件作为模块进行
import和require(包括热重载和 watch 模式支持) - 使用 Bun 的打包器在前端应用中
import和requireYAML 文件
兼容性
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
- 更小的打包体积
- 对未使用的配置进行摇树优化(命名导入)