.env 文件校验器, 按 Bash 语法解析 .env, 检测重复键 / 缺失必填 / 不安全值 / 疑似 secret 泄露, 还能横向对比 prod / staging / dev 三套环境差异。
- 本地处理
- 分类 开发运维
- 适合 分享前检查文件类型、大小、元数据和明显不匹配信号。
语法
0没问题 —— .env 文件干净。
Secret 扫描
0没识别到已知 secret 形状。通用高熵的值仍可能是你的问题。
Schema 校验
0在上面粘 schema, 才能跑必填检查。
这个工具能做什么
给真要提交进仓库前最后看一眼的 `.env` 用的 linter。解析的方言跟 Node `dotenv` 和 Bash 一致 —— `KEY=VALUE`、`export KEY=value`、双引号字 符串带 `\n` `\t` 转义、单引号字面量字符串、整行 `#` 注释和值后的 `# 行内注释`、`${VAR}` 变量插值。在解析之上跑四个语法检查: (1) 重复键, (2) 不合法 key (含空格、数字开头、小写驼峰), (3) 空 值, (4) 引号不匹配。然后是 secret 扫描器, 识别 AWS access key (`AKIA…`)、GitHub token (`ghp_…`)、OpenAI key (`sk-…`)、Stripe 实 盘 / 测试 key (`sk_live_…` / `sk_test_…`)、Slack token (`xoxb-` / `xoxp-`)、JWT (`eyJ…`), 加上一个通用的高熵兜底。需要的 话还能贴一个必填 schema (`KEY=required` 或 `KEY=optional:default`) —— 容器在线上 boot 阶段崩之前就把缺的 env 抓出来。最后一个 tab 是三列对比, 粘 2 或 3 个 .env (prod / staging / dev), 输出表格: 哪些 key 三处都有、哪些只在一处、哪些值不一致。100% 浏览器本地 跑, `.env` 不离开当前标签页。
工具细节
- 输入
- 文本
- 页面会根据工具类型展示文本框、数值控件、文件选择或结构化输入。
- 输出
- 即时结果 + 复制
- 结果区优先给出可操作结果,支持项会显示复制、下载或可视化预览。
- 隐私
- 浏览器本地处理
- 主工具逻辑未发现外部 API 调用,输入通常留在当前标签页内处理。
- 保存 / 分享
- 可分享链接状态
- 关键设置会进入 URL,复制链接后别人能复现同一组参数。
- 性能预算
- 首屏 JS ≤ 22 KB
- 没有声明 WASM 依赖,适合快速打开和移动端使用。
- 适用场景
- 开发运维 · 程序员
- 分类和职业标签用于推荐相关工具、组织内链,并帮助用户快速判断是否适合当前任务。
怎么用
-
1. 输入
把内容粘贴或拖入工具面板。
-
2. 处理
点击按钮,在浏览器内本地处理,文件不上传。
-
3. 复制 / 下载
一键复制结果或下载到本地。
.env 文件校验器 适合怎么用
适合在上传、交付、归档、客服排查前使用,也适合任何文件离开本机前的本地复核。
适合文件任务
- 分享前检查文件类型、大小、元数据和明显不匹配信号。
- 上传、归档、接收或审核前整理混合文件夹。
- 敏感文件先留在浏览器里处理,不用交给账号型服务。
文件检查项
- 不要只凭扩展名判断真实文件类型。
- 文件发给客户、供应商或公开页面前,先看元数据。
- 复制、转换或导出结果确认前,保留原文件。
下一步可以接着做
这些入口会把当前任务接到更完整的工具链里。
真实使用场景
抓重复键, 别让 prod 被默默覆盖
你在 `.env` 顶部加了 `STRIPE_KEY=sk_test_…`, 一周后合 PR 时又在文件底部追加了 `STRIPE_KEY=sk_live_…`。Node `dotenv` 保留最后一条; 本地用测试 key 测试通过, staging 用线上 key 启动。粘进来, "重复键" 面板会指出 STRIPE_KEY 出现在第 4 行和第 41 行, 两个值并排列出来。删一条, 发版。
在 docker-compose up 前确认新服务的 env 都齐了
新起的 Rust 服务要 `DATABASE_URL`、`REDIS_URL`、 `JWT_SECRET`、`SENTRY_DSN`。README 的 "config" 段列了。把 这四行写进 schema 框 (`KEY=required` 一行一个), 左边粘 `.env`。"Schema" tab 里每条满足的 key 是绿的, 缺的是红 的 —— 一般都是 `SENTRY_DSN`, 每次都是。省下容器启动 30 秒崩溃一次的循环。
在 git push 之前抓住泄露的 AWS access key
团队里有人在 `.env.example` 里塞了 `AWS_ACCESS_KEY_ID=AKIAIOSFODNN7…`, 理由是 "只是个示例"。 secret 扫描器立刻标这一行是 AWS 形状, CI 里的 gitleaks 步 骤迟早能查出来, 但要等 4 分钟。这里 200 毫秒抓住, 立即换 key (已经公开了, 当烧掉处理), 把 `.env.example` 改成 `AWS_ACCESS_KEY_ID=AKIA_REPLACE_ME`。
对比 staging 和 production env, 确认只有一处刻意改动
要上一个新功能 `FEATURE_NEWPAY_ENABLED`。你以为 production 和 staging 只差这个 + 数据库 URL 和 region 这两个明显的。 两个文件粘进 "对比" tab, 表格输出: 47 个 key 相同, 3 个 值不同 (DB_URL、AWS_REGION、FEATURE_NEWPAY_ENABLED), 0 个 只在一边出现。和你预期完全一致 —— 放心 rollout。
把 docker-compose `environment:` 块翻出来的 .env 过一遍语法
要把 docker-compose 的服务搬到 k8s, 得把 `environment:` YAML 翻成 `.env` ConfigMap。把转好的 .env 粘进来, 语法检 查指出两行漏了引号 —— 值里有 `:` 或空格那种。补上引号, 复制回去, apply。
同事 Slack 发来的 .env 先审一遍再存进 1Password
同事丢一个 .env 给你接手某个服务。存进密码管理器之前你 想知道: 标准 key 是不是齐? 有没有明显泄露? 有没有重复? 一个 "全部检查" 视图把这三件事在一屏里答完, "脱敏" 开关 让你能安全截图进交接文档。
常见踩坑
把真生产 `.env` 粘进来 "测试一下工具"。解析全在浏览器里没错, 但 "把 prod secret 粘进任何 web form" 这个习惯不该养成。复制一份, 把值清空, 粘清空的副本进来。
期待 `${VAR}` 跨文件解析变量。插值只在同一份输入里, 按定义顺序解析 (跟 Node `dotenv-expand` 一致)。跨文件应在运行时层做, 不是静态 linter 的事。
给数字和布尔值加引号。`.env` 的值永远是字符串, `PORT=3000` 和 `PORT="3000"` 解出来都是字符串 "3000"。引号只在值里有换行、`#`、或要保留前后空格时才有意义。
在 Node `dotenv` 加载的 `.env` 里写 `export KEY=value`, 然后惊讶 `export ` 跑进了 key 名。Node `dotenv` 按惯例会去掉开头的 `export `, 这个工具同步这一规则。但纯 Bash 或 k8s ConfigMap 消费者不会脱 —— 跨平台请改回 `KEY=value`。
把空值当作 "没有这个 key" 处理 required 检查。`KEY=` (空) 和缺这一行一样, 都不满足 `required` —— 这跟主流配置库一致。如果空真的是有意为之, schema 里把这个 key 写成 `optional:` 即可。
指望 secret 扫描器认出你们内部的自定义 token。它认八种常见形状 (AWS、GitHub、OpenAI、Stripe live/test、Slack、JWT、通用高熵兜底)。如果你们有自己的 token 形状, 加到团队 gitleaks 配置里 —— 客户端扫描器没法提前知道你们的私有格式。
隐私说明
你粘的 `.env` 不离开当前浏览器标签页。解析、语法检查、secret 扫描、schema 校验、对比视图全部是纯 JavaScript —— 没有网络请 求, 没有对文本框内容做埋点, 也不写 localStorage。URL 只带选 项 (当前 tab、脱敏开关), "分享设置" 链接给同事打开看到的是 同样的工作流, 但他粘自己的文件, 你的内容不会跟着走。话说回 来: 真生产 `.env` 装的是真生产 key, 粘进自己的浏览器离 "手 滑 Ctrl-V 到 Slack" 也就一步距离。更稳妥的做法是: 复制一份, 把你只关心结构 (key 名、是否存在、引号对不对) 的值清空, 粘 清空的副本进来。"脱敏" 开关是同一个用意 —— 能安全截图校验 结果, 值不出现在截图里。
常见问题
类似工具组合
做你这行的人, 还会一起用这些。