YAML 跨运行环境预检

粘贴 YAML 文档(GitHub Actions workflow、Docker Compose 文件、Kubernetes manifest 或通用 YAML),查看不同工具读取时哪些结构特征和有歧义的值会表现不同。本工具直接扩展 YAML 语义差异检查器:完整复用其 YAML 1.1 与 1.2 标量歧义检查(挪威问题及其相关情况),并增加与真实 YAML 使用方相关的结构检查,例如锚点/别名、合并键、制表符缩进、重复键和 flow 风格用法。

在您的浏览器中本地处理。文件绝不会被上传。

使用方法 工具

  1. 粘贴 YAML 或上传 .yaml/.yml 文件;内容不会离开浏览器。
  2. 选择“检查 YAML”。
  3. 查看每个标记问题影响哪些运行环境/工具以及原因。
  4. 在提供时使用建议改写(制表符改空格、歧义标量加引号)。有些问题(锚点、合并键、重复键)只会标出,因为安全自动修改可能造成未请求的结构变化。

假设条件

来源与参考数据

方法说明

分两层分析文档。第一层按 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

结果: 标记为错误(制表符为规范禁止,而不只是建议避免),并建议将每个前导制表符换成两个空格。

实用指南
常见错误

常见问题

为什么本工具与 YAML 语义差异检查器有重叠?

并非重复实现,而是直接复用。规则 1 调用该工具自己的标量解析逻辑,不重复解决相同问题;然后增加语义检查器刻意不处理的结构检查(锚点、合并键、制表符、重复键、flow 风格)。

为什么合并键是错误,而锚点/别名只是警告?

合并键完全不属于 YAML 1.2 规范,并且 Kubernetes YAML 处理等工具明确不支持,几乎肯定会出问题。锚点/别名是有效且广泛支持的核心 YAML,只是部分工具出于安全原因限制,风险真实但不确定性更高。

为什么工具不自动修复锚点、合并键或重复键?

这些情况都需要理解文档实际含义(锚点展开的内容、重复项中哪一个才是预期值),而非机械改文本。工具会标记并解释手动处理方式,不会猜测。

上次审核: 2026-09-26

这是基于模式的有限结构检查和复用的标量歧义比较,不是完整 YAML 解析器,也不是针对某个工具实际行为的验证器。Flow 风格集合内部的标量不会扫描歧义(与 YAML 语义差异检查器记录的范围一致);重复键按缩进跟踪映射层级,不会构建完整文档树。

主题和工具偏好设置,以及已保存和最近使用的列表仅存储在此浏览器中。