YAML 跨运行环境预检
粘贴 YAML 文档(GitHub Actions workflow、Docker Compose 文件、Kubernetes manifest 或通用 YAML),查看不同工具读取时哪些结构特征和有歧义的值会表现不同。本工具直接扩展 YAML 语义差异检查器:完整复用其 YAML 1.1 与 1.2 标量歧义检查(挪威问题及其相关情况),并增加与真实 YAML 使用方相关的结构检查,例如锚点/别名、合并键、制表符缩进、重复键和 flow 风格用法。
在您的浏览器中本地处理。文件绝不会被上传。
使用方法 工具
- 粘贴 YAML 或上传 .yaml/.yml 文件;内容不会离开浏览器。
- 选择“检查 YAML”。
- 查看每个标记问题影响哪些运行环境/工具以及原因。
- 在提供时使用建议改写(制表符改空格、歧义标量加引号)。有些问题(锚点、合并键、重复键)只会标出,因为安全自动修改可能造成未请求的结构变化。
假设条件
- 标量歧义检查(规则 1)与 YAML 语义差异检查器逻辑完全相同,直接复用 YAML 1.1 与 YAML 1.2 Core Schema 比较,而非重新实现;此处强调其对特定运行环境的意义(例如 GitHub Actions matrix 的 `flag: on`)。
- 结构检查(锚点/别名、合并键、制表符缩进、重复键、flow 风格)是在与语义检查器相同的有限 block 映射范围上进行基于模式/缩进的检查,不是完整 YAML 解析器。
- “受影响”的运行环境依据广泛记录的真实限制(例如 Kubernetes 移除对合并键的支持、kubectl 对别名的限制),不是对所有工具版本的完整审计。
来源与参考数据
方法说明
分两层分析文档。第一层按 YAML 1.1 和 YAML 1.2 Core Schema 规则解析每个 plain 标量(与 YAML 语义差异检查器完全相同的逻辑),标记任何分歧,并解释其与特定运行环境的关系。第二层扫描真实 YAML 使用方之间行为不同的结构特征:锚点/别名(警告,部分工具限制或禁用它们以防递归展开耗尽资源)、合并键(错误,是 YAML 1.1 扩展且不属于 YAML 1.2 规范,Kubernetes 和许多严格解析器不支持)、制表符缩进(错误,YAML 规范禁止)、同一映射中的重复键(警告,规范未规定,多数解析器静默保留最后一次出现),以及在 block 风格文档中使用 flow 集合(信息级低置信提示,并非真正问题)。
计算示例
看起来像标志值的 GitHub Actions matrix 值
输入项: flag: on
结果: 复用工具 1 的挪威问题检测:YAML 1.1 将“on”解释为布尔值 true,YAML 1.2 将其解释为字符串“on”。在 GitHub Actions matrix 或 env 值中,这正是可能本应保留字符串的情况。
Docker Compose 合并键
输入项: <<: *defaults
结果: 标记为错误:合并键是 YAML 1.1 扩展,不属于 YAML 1.2 规范,Kubernetes YAML 处理和若干严格解析器不支持。不给自动改写;若需可移植版本,应手动展开锚点内容。
使用制表符缩进的 Kubernetes manifest
输入项: \tname: demo
结果: 标记为错误(制表符为规范禁止,而不只是建议避免),并建议将每个前导制表符换成两个空格。
实用指南
- 合并键和制表符缩进应视为必须修复:它们被规范禁止,或明确不受可能使用的工具(如 Kubernetes、严格解析器)支持。
- 若文档会经过 kubectl 或安全敏感的 YAML 加载器,请再次检查锚点/别名;部分工具会限制别名展开,以避免类似 YAML bomb 的资源耗尽。
- 规则 1 标出的值应像 YAML 语义差异检查器一样处理:若应保持字符串,请加引号。
常见错误
- 认为 Docker Compose 中可用的合并键在 Kubernetes manifest 中也能用;Kubernetes 多年前已移除对合并键的支持。
- 复制代码块后忘记移除或重命名原键,产生静默重复键;多数解析器只保留最后一个。
- 从使用制表符的来源复制内容后,在同一文件混用制表符和空格;部分解析器容忍,许多不容忍,而编辑器中视觉效果可能相同。
常见问题
为什么本工具与 YAML 语义差异检查器有重叠?
并非重复实现,而是直接复用。规则 1 调用该工具自己的标量解析逻辑,不重复解决相同问题;然后增加语义检查器刻意不处理的结构检查(锚点、合并键、制表符、重复键、flow 风格)。
为什么合并键是错误,而锚点/别名只是警告?
合并键完全不属于 YAML 1.2 规范,并且 Kubernetes YAML 处理等工具明确不支持,几乎肯定会出问题。锚点/别名是有效且广泛支持的核心 YAML,只是部分工具出于安全原因限制,风险真实但不确定性更高。
为什么工具不自动修复锚点、合并键或重复键?
这些情况都需要理解文档实际含义(锚点展开的内容、重复项中哪一个才是预期值),而非机械改文本。工具会标记并解释手动处理方式,不会猜测。
上次审核: 2026-09-26
这是基于模式的有限结构检查和复用的标量歧义比较,不是完整 YAML 解析器,也不是针对某个工具实际行为的验证器。Flow 风格集合内部的标量不会扫描歧义(与 YAML 语义差异检查器记录的范围一致);重复键按缩进跟踪映射层级,不会构建完整文档树。
主题和工具偏好设置,以及已保存和最近使用的列表仅存储在此浏览器中。