配置引用分析

YAML 锚点先找到实际定义,再展开共享内容

同时查看定义位置、别名目标与独立的展开结果。

YAML 锚点解析与展开

输入 YAML

展开后的 YAML

输入仅在当前浏览器内处理,不上传、不执行、不保存,也不加入 URL。

默认关闭合并。开启后显式键优先,较早的来源映射优先;仅做浅合并。合并示例会预览开启此选项。

yaml 2.9.0 · 源文件的版本指令必须与所选版本一致,输出声明所选版本。

输入最多 500,000 个 UTF-16 单位 / 2 MB UTF-8;100 个文档;源节点及展开访问各 50,000;深度 100;图 5,000 行;输出字符及标量工作量各 200 万;超时 5 秒。

源引用关系图

箭头从定义指向使用位置,点击任一位置可返回输入。“找到目标”只代表定位到定义,不代表循环图能够展开。

输入 YAML 或执行分析。

同名的 YAML 锚点不一定指向同一段内容。一个别名采用当前文档中位于它之前、距离最近的定义;引用图按真实位置区分每次定义,让配置覆盖问题可以回到源文逐项检查。

YAML 别名展开用于查看共享值的完整内容,YAML 合并键用于可选的浅层继承。处理 YAML 嵌套引用时,先检查关系再查看预览;即使展开失败,已经收集的关系仍会保留,帮助查找未定义引用或循环。

为什么检查 YAML 锚点

看清配置实际复用了哪一段内容

同名定义也能分别追踪

检查 YAML 锚点时,图中每个别名都关联到同文档里最近的先前定义。两个同名锚点依然是不同节点,字符串里的 & 或 * 不会被误认成引用。点击位置即可返回对应行列。

两个颜色不同但标记相同的定义连接到各自后续引用,红色连线标出循环。

先比较覆盖结果再应用

开启合并扩展后,可以核查哪些默认值被保留、哪些被显式配置覆盖。合并序列中较早的映射优先,嵌套值整体替换;结果独立显示,确认前不会改写输入。

两个来源映射汇入结果,本地显式设置覆盖继承值,未受影响的嵌套块保持完整。

从引用关系读懂展开结果

三个操作,让覆盖规则和原始位置都可追查

01

先选版本,再决定是否合并

默认使用 YAML 1.2 核心模式,两个版本的合并扩展均默认关闭。切换到 1.1 会改变 yes、日期等隐式类型。显式 %YAML 指令必须与选项一致;加载合并示例时会同时预览输入和合并选项的开启状态。

02

从引用返回源位置

点击定义或引用一端即可定位真实行列。关系图每页 50 条,也列出未被使用的定义。未解析引用与检测到的循环边会在展开失败后保留;超出预算时图可能只显示已收集的部分。

03

确认替换,并保留撤销快照

使用结果、加载示例、清空和导入文件都会先显示行数变化预览。应用后可撤销一次,同时恢复输入、选项、输出和诊断。手动模式支持 Ctrl/Cmd+Enter;自动模式等待编辑停顿 350 毫秒,过期结果禁止导出。

定位、合并与类型保留

区分 YAML 结构和应用程序自己的配置规则

识别真实引用位置

词法分析与语法树识别实际锚点属性和别名节点,包括独占一行的锚点以及字符串键上的锚点。带引号文本和多行块内容视为数据。每个文档单独记录定义,同名引用按源文顺序解析。

循环图仍可检查

关系分析先检测递归依赖,不需要先展开内容。自引用可以是合法的 YAML 图,但不能生成有限、无别名的文本。工具标明出错引用并阻止整个输出,保留已收集关系供排错。

明确的浅合并

合并扩展接受映射、映射别名及映射序列。较早的来源提供默认值,显式键无论出现在什么位置都覆盖继承值。嵌套对象整体替换,不递归合并;序列也不会拼接。

保留标量含义

展开复制语法树节点,不经过 JSON 中转。大整数、数值写法、非有限浮点数和时间戳保留源表示。输出会在同一模式下重新解析并检查,通过后才开放导出。

版本、类型与展开边界

只输出完整、有限且通过检查的 YAML 结果

版本必须一致
由 yaml 2.9.0 处理 YAML 1.2 核心模式或 1.1 模式。%YAML 指令与选项冲突时直接停止,不自动覆盖选项。每个输出文档声明所选版本;合并是独立扩展,即使选择 1.1 也默认关闭。
合并不等于递归覆盖
开启扩展时,普通 << 与 !!merge 键执行映射合并。作为引擎扩展,允许多个合并键,按源文顺序处理,较早来源优先,显式键始终优先。带引号的 << 和 !!str << 是普通字符串,输出仍带引号。关闭合并时普通 << 是字符串键,普通重复键仍会被拒绝。
仅接受字符串键和指定标签
映射键必须解析为字符串,也接受指向锚定字符串的别名。数值、布尔、null 和集合键不会被强制转成文字,而是报错。支持核心标签、timestamp 和 binary;binary 要求带填充的规范 Base64。未知标签及 set、omap、pairs 集合会阻止展开,不执行自定义构造器。
保留值,不保留原始排版
输出移除锚点、别名语法、注释和原空白。数值与时间戳保留原词法,不通过 Number 或 Date 舍入;特殊浮点和二进制仍作为 YAML 类型。字符串可能重新加引号或排版。检查后再应用,工具不会自动覆盖原文件。
文档与应用边界
别名只能使用自身文档中最近的先前定义,前向引用报错。同名锚点允许重复,不等于映射键可以重复。不处理 Docker Compose 插值、GitLab extends 或 !reference、Helm 模板、JSON $ref、远程 include 或跨文件导入。
所有展开路径都计入预算
输入上限为 500,000 个 UTF-16 单位及 2 MB UTF-8,最多 100 个文档、50,000 个源节点,深度 100。展开最多访问 50,000 次,重复别名、被覆盖的合并来源及合并键均计入。源值与展开值的标量长度共享 200 万单位工作预算,输出另限 200 万字符。图最多 5,000 行,Worker 超时 5 秒;任何失败都阻止整体导出,不提供截断文件。

YAML 锚点常见问题

嵌套引用、格式变化与类型支持

锚点可以嵌套引用吗?

可以。YAML 锚点可包含指向先前定义的别名,展开会继续追踪这些依赖。若形成循环,就无法生成有限文本,工具保留诊断图并阻止导出;深度或工作预算超限也会停止,不只展开一半。

展开后会丢失注释和格式吗?

会。结果移除注释、原空白以及锚点和别名语法,字符串也可能重新排版。数值与时间戳保留源表示。输入在应用前保持不变,应用后可撤销并恢复输入、选项和分析快照。

支持哪些 YAML 数据类型?

支持字符串、布尔、null、数值、序列、映射,以及受支持的 timestamp 和 binary 标签。键必须是字符串,二进制要求规范且带填充的 Base64。不支持未知标签以及 set、omap、pairs;1.1 和 1.2 的隐式类型规则不同。

为什么展开后还有 & 或 * 符号?

这些字符可以是普通字符串内容,并不一定是引用语法。工具通过语法树识别真正的引用,成功结果不会保留锚点或别名节点。未定义引用、循环或预算超限会阻止导出,而不是留下未展开节点冒充成功。

锚点和 JSON 引用有什么区别?

YAML 锚点与别名是单个文档内部的语法关系,不能引用另一个文档或文件。JSON $ref 属于应用层协议,可能另有远程或跨文件规则。本工具只处理 YAML 原生引用,不解析 $ref、Compose include 或模板。

遇到需要核查的引用或标量案例?

试用 YAML 锚点分析

用 YAML 锚点关系定位共享定义,检查展开值与覆盖结果,再决定是否替换配置。

展开结果仍需通过目标应用自己的校验。