YAML 配置互转(js-yaml)
灵感:能力工具箱 yaml-config(pkg: js-yaml)。
在浏览器本地把客户筛选规则、跟进模板配置等在 YAML(易读)与 JSON(易存)之间互转,不请求后端。
何时使用
- 运营可读的 YAML 配置导入系统
- 把 JSON 配置导出为 YAML 便于 diff/评审
- 本地校验配置能否解析
硬约束
- 依赖
js-yaml;使用load/dump(或等价 API)。 - 安全:
load使用安全模式(默认load已非loadAll任意类型时注意;禁止启用可执行自定义类型)。勿对不可信 YAML 开危险 schema。 - 解析失败返回中文原因;
dump使用稳定缩进(如 2 空格)。 - 往返后关键字段不丢;可对客户配置做轻量字段校验(可选)。
- 纯本地,不上传配置到第三方。
推荐实现要点
import yaml from 'js-yaml'
export function yamlToJson(text: string): { ok: true; data: unknown } | { ok: false; reason: string } {
try {
const data = yaml.load(text, { schema: yaml.DEFAULT_SCHEMA })
if (data === undefined) return { ok: false, reason: '内容为空' }
return { ok: true, data }
} catch (e: any) {
return { ok: false, reason: e?.reason || e?.message || 'YAML 无法解析' }
}
}
export function jsonToYaml(data: unknown): { ok: true; text: string } | { ok: false; reason: string } {
try {
const text = yaml.dump(data, {
indent: 2,
lineWidth: 100,
noRefs: true,
sortKeys: false,
})
return { ok: true, text }
} catch {
return { ok: false, reason: '无法序列化为 YAML' }
}
}
/** 客户配置示例形状 */
export type CustomerFilterConfig = {
stages?: string[]
minAmount?: number
owners?: string[]
}
Agent 步骤
- 安装
js-yaml,封装yamlToJson/jsonToYaml。 - UI:双栏「YAML ↔ JSON」预览;导入文件用 UTF-8。
- 自测:样例配置往返;坏缩进有中文错误。
附加
- README.md · reference.md · templates/sample-config.yaml · templates/usage.md