主要特性
- 支持 HCL2 的格式化,适用于 Terraform 风格的块、属性、列表/映射和 heredoc
- 一致的缩进和围绕 =、逗号、大括号和嵌套块的间距
- 尽可能保留注释和有意空行以提高可读性
- 适用于 .tf、.hcl、基于 HCL 的 .tfvars 和 Packer .pkr.hcl 文件
- 幂等输出:再次运行格式化工具会得到相同结果
- 最小化界面:单一“格式化”操作,无需争论样式选项
- 一键复制或从编辑器下载格式化结果
- 通过安全端点进行服务器支持处理 — 适合快速修复;对于高度敏感代码,建议使用本地 CLI
🔧 如何使用 HCL 格式化工具 for hcl-formatter
1. 粘贴或拖入代码
打开您的HCL/Terraform文件(.tf、基于HCL的.tfvars、.hcl、.pkr.hcl等),将内容粘贴到编辑器中,或如果浏览器支持,直接拖入文件。
2. 点击“格式化”
点击格式化按钮。您的配置将发送至安全后端,应用terraform fmt风格的缩进、间距和布局规则,然后返回格式化后的HCL2代码。
3. 检查、复制或下载
在编辑器中检查结果,然后将其复制回IDE,或下载格式化后的文件并提交至代码库。
技术规格
执行模式
格式化器采用服务器后端,旨在模拟terraform fmt风格的HCL2布局规范化。
| 方面 | 详情 |
|---|---|
| 模式 | 服务器后端(无浏览器内WASM) |
| 范围 | 空白、缩进、间距、基本布局 |
| 重排序 | 不对资源或块进行语义重排序 |
| 选项 | 无——单一格式化操作确保输出可预测 |
| 限制 | 约1–2 MB输入,~25秒服务器超时(可能调整) |
| 保留 | 临时处理——格式化后输入即被丢弃 |
语言覆盖
理解Terraform及其他HashiCorp工具中常用的HCL2结构。
| 结构 | 示例 | 备注 |
|---|---|---|
| 块 | resource、variable、output、module、locals、job、task | 保留嵌套块结构 |
| 属性 | name = "web"、count = 2 | 围绕=及属性间间距规范化 |
| 集合 | [1, 2, 3]、{ key = value } | 列表和映射/对象的统一布局 |
| 多行字符串 | <<-EOF ... EOF | 保留标记;尽可能规范化缩进 |
| 注释 | # 和 // 风格的注释 | 尽可能保留以维护意图和文档 |
格式化前后对比
Terraform 资源中缩进和间距清理的小示例。
# 格式化前
resource "aws_s3_bucket" "b"{bucket="demo"
tags={Name="demo"}}
# 格式化后
resource "aws_s3_bucket" "b" {
bucket = "demo"
tags = {
Name = "demo"
}
}
错误与边缘情况
如果格式化失败或返回错误,通常是由于 HCL2 输入中的解析问题。
| 症状 | 可能原因 | 检查内容 |
|---|---|---|
| 无输出 / 解析错误 | 未闭合的大括号、方括号或圆括号 | 统计匹配的 { }、[ ]、( ) 对并闭合所有块 |
| 多行字符串问题 | 缺失或不匹配的终止符 | 确保 EOF 等标记准确出现在独立行上 |
| 混合样式 | 制表符/空格或杂散字符 | 规范化缩进,移除杂散控制字符 |
| .tfvars 混淆 | JSON 与 HCL 语法 | 对 *.tfvars.json 文件使用 JSON 格式化器或 terraform fmt |
命令行替代方案
对于日常的基础设施即代码工作流,请在本地和 CI 中使用官方格式化工具,并将此在线工具用于快速临时清理。
macOS / Linux
Terraform:原地格式化
terraform fmt重写当前目录中的 .tf 和基于 HCL 的 .tfvars 文件。
Terraform:递归 CI 检查(不写入)
terraform fmt -check -recursive如果有任何文件需要格式化,则非零退出——非常适合 CI 和预提交钩子。
Packer:格式化模板
packer fmt path/to/template.pkr.hcl原地格式化指定的 Packer HCL 文件。
Windows (PowerShell)
递归格式化所有 Terraform 文件
Get-ChildItem -Recurse -Filter *.tf | ForEach-Object { terraform fmt $_.FullName }对当前目录下找到的每个 .tf 文件运行 terraform fmt。
CI 风格的格式化检查
terraform fmt -check -recursive在构建流水线中使用,当格式化过时时使构建失败。
GitHub Actions
如果需要格式化,则使构建失败
steps:
- uses: hashicorp/setup-terraform@v3
- run: terraform fmt -check -recursive当任何 Terraform 文件未正确格式化时停止工作流。
在拉取请求上自动格式化(可选)
steps:
- run: terraform fmt -recursive
- run: git diff --quiet || (git config user.name "bot" && git config user.email "bot@example" && git commit -am "chore: terraform fmt" && git push)应用 terraform fmt 并将仅包含格式化的提交推回分支。
实际应用
PR 整洁与审查
统一空白和缩进,让审查者专注于实际的基建变更。
- 在打开拉取请求前运行格式化
- 减少 Terraform 审查中关于样式的琐碎评论
- 保持 git 差异小而意义明确
Terraform 模块开发
保持模块在团队、仓库和注册表之间的一致性。
- 对齐共享模块中的变量和输出块
- 确保示例配置符合统一的内部风格
CI 把关
在 CI 中使用 terraform fmt 检查,防止样式随时间漂移。
- 将 `terraform fmt -check -recursive` 添加为强制流水线步骤
- 在所有 .tf 文件格式化前阻止合并
入职与文档
可读性强的示例帮助新团队成员快速学习 Terraform 和内部风格。
- 在 README 中发布格式一致的代码片段
- 在内部 Terraform 培训中使用清晰的示例
❓ Frequently Asked Questions
🔒我的代码是在本地处理的吗?
🛡️我可以在这里粘贴密钥吗?
🧩格式化会改变配置行为吗?
📄我可以格式化 .tfvars 文件吗?
JSON 的变量;这些遵循 JSON 规则,最好由 JSON 格式化器或 `terraform fmt` 本身处理。⚙️这与 `terraform fmt` 有何不同?
🧯为什么格式化失败了?
JSON 风格的 tfvars 与 HCL 语法混合使用。修复结构问题(或使用正确的方言/格式化器)后重试。Pro Tips
在 CI 中强制执行 `terraform fmt -check -recursive` 以防止大型基础设施仓库中的格式漂移。
避免将密钥或状态相关数据粘贴到在线工具中;保持配置示例的清洁,并对真实的基础设施代码运行本地 CLI 格式化器。
在编辑器中规范化尾随换行符和缩进,使 Terraform 文件在不同平台上产生干净、稳定的差异。
添加一个运行 `terraform fmt` 的预提交钩子,使拉取请求在提交时已格式化,评审对话可以专注于架构和风险。
Additional Resources
Other Tools
- CSS 美化器
- HTML 美化器
- JavaScript 美化器
- PHP 美化器
- 颜色选择器
- 精灵图提取器
- Base64 解码器
- Base64 编码器
- C# 格式化器
- CSV 格式化器
- Dockerfile Formatter
- Elm 格式化器
- ENV 格式化器
- Go 格式化器
- GraphQL 格式化器
- INI 格式化器
- JSON 格式化器
- LaTeX 格式化器
- Markdown 格式化器
- Objective-C 格式化器
- Php Formatter
- Proto 格式化器
- Python 格式化器
- Ruby 格式化器
- Rust 格式化器
- Scala 格式化器
- Shell 脚本格式化器
- SQL 格式化器
- SVG 格式化工具
- Swift 格式化工具
- TOML 格式化工具
- Typescript Formatter
- XML 格式化工具
- YAML 格式化工具
- Yarn 格式化工具
- CSS 压缩器
- Html Minifier
- Javascript Minifier
- JSON 压缩器
- XML 压缩器
- HTTP 头部查看器
- PDF 转文本
- 正则表达式测试器
- 搜索引擎排名检查器
- Whois 查询