Ad
DevToolXDevToolX

YML 格式化

格式化、驗證和美化 YAML 資料

關於 YML 格式化

YAML Formatter 以 YAML 1.2 安全解析器驗證輸入,再以統一縮排重新序列化,捕捉重複的 key、用了 tab 而非空格、以及型別模糊等問題——這些都會讓 Kubernetes、GitHub Actions 等工具鏈靜默失敗。YAML 規格在語法上很寬鬆,卻在幾個地方有出人意料的嚴格限制,這個工具讓那些邊界情況在推上 CI 或部署到叢集之前就浮出水面。

常見使用情境

驗證 Kubernetes manifest
Kubernetes 在某些版本會靜默拒絕縮排錯誤或有重複 key 的 YAML,格式化驗證後再執行 kubectl apply 更保險。
Debug GitHub Actions workflow
Workflow YAML 由 GitHub 自己的引擎解析,對多行字串和 anchor 有自己的怪癖,push 之前先格式化確認。
編輯 docker-compose 檔
Docker Compose 對縮排和型別轉換很敏感,格式化工具能在 docker compose up 執行到一半失敗之前就抓出錯位的 key 或意外的型別。
檢查 Ruby、Python 設定檔
Rails 的 database.yml、Ansible playbook、Python 專案設定都用 YAML,驗證後可以在部署前發現 merge key 錯誤和隱性型別轉換問題。

常見問題

為什麼 YAML 不能用 tab?

YAML 1.2 明確禁止用 tab 字元縮排。原因是 tab 的寬度不明確——不同編輯器和終端機顯示方式不同,讓以縮排為結構依據的解析無法可靠進行。縮排位置有 tab 就是硬性語法錯誤。請把編輯器設定成在 YAML 檔按下 Tab 時插入空格。

什麼是 YAML 1.1 的「挪威問題」?

在 YAML 1.1 裡,yes、no、on、off、true、false 全部被解析為布林值。挪威的 ISO 國碼 NO 如果不加引號就會變成 false。YAML 1.2 把布林值縮限為只有 true 和 false,但許多 parser(包括 PyYAML 的預設 loader)仍然實作 1.1 規則。no、yes、國碼這類模糊的值都應該加引號。

YAML 的 anchor 和 alias 是什麼?

anchor(&name)標記一個節點供後續引用,alias(*name)貼上該節點的參照。常用於 docker-compose 和 CI 設定,避免重複貼相同的 environment block。merge key(<<: *anchor)可以把一個 map 疊加到另一個上面。格式化工具會保留 anchor 和 alias,不會把它們展開攤平。

什麼時候要給字串加引號?

當值長得像其他型別時就要加引號:"3.14" 保持字串,3.14 變成浮點數;"true" 保持字串,true 變成布林值;"null" 保持字串,null 變成 nil。含有 :、#、{、}、[、] 或頭尾有空格的字串也要加引號,避免 parser 誤以為是語法結構。

YAML 和 JSON 各適合什麼場景?

YAML 適合人工維護的設定檔——不需要大括號、支援註解、多行字串自然。JSON 適合機器對機器的資料交換——型別明確、無意外轉換、各語言普遍支援。人寫設定用 YAML,API payload 用 JSON。

相關工具