关于 envdiff
envdiff 比较本地与 CI 环境描述信息,帮助开发者定位环境差异。报告仅列出变量名,不会泄露变量值。
主要功能
- 01比较 Node、操作系统和锁文件字段
- 02查找仅在一侧存在的环境变量
- 03按变量名标出值不同的变量
- 04返回 JSON 差异数量
适用场景
- 01排查本地与 CI 的环境差异
- 02在不暴露机密值的情况下检查环境
MCP 相关
MCP 服务提供 `diff_environments` 工具,用于比较必填的本地和 CI 环境描述信息。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
1收录的工具列表 · 更新于 1 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| ci | object | 是 | CI 环境描述 |
| ci.os | string | 否 | 操作系统标识符 |
| ci.env | object | 否 | 以字符串映射表示的环境变量(比较值,但不回显) |
| ci.node | string | 否 | Node.js 版本字符串 |
| ci.lockfile_present | boolean | 否 | 是否存在锁文件 |
| local | object | 是 | 本地环境描述 |
| local.os | string | 否 | 操作系统标识符 |
| local.env | object | 否 | 以字符串映射表示的环境变量(比较值,但不回显) |
| local.node | string | 否 | Node.js 版本字符串 |
| local.lockfile_present | boolean | 否 | 是否存在锁文件 |
详细介绍
envdiff
“这在我的机器上能运行”——机器的哪一部分?envdiff 会比较两个环境描述符,通常是开发者的本地环境 和 CI 环境,并准确报告两者的差异:
- Node 版本、操作系统和锁文件是否存在,作为字段进行比较(缺失的字段会报告为
null) - 仅存在于一侧的环境变量,按键列出
- 值不同的环境变量——仅按键名列出。会比较值,但绝不会将值回显到报告中,因此描述符可以包含机密信息而不会泄露。
描述符是一个小型 JSON 对象:
{"node": "20.11.0", "os": "linux", "env": {"CI": "true"}, "lockfile_present": true}
——所有字段均为可选。
纯本地计算:无需网络,也无需配置。
CLI
npx @reneturcios/envdiff diff local.json ci.json
npx @reneturcios/envdiff --version
输出为 JSON 格式的比较报告,其中包含
summary.total_differences 计数。退出代码:成功时为 0
(差异是结果,不是错误),运行时错误(无法读取或描述符无效)时为 1,用法错误时为 2。
MCP 服务
npx -y @reneturcios/envdiff mcp
MCP 客户端配置:
{
"mcpServers": {
"envdiff": {
"command": "npx",
"args": ["-y", "@reneturcios/envdiff", "mcp"]
}
}
}
工具
-
diff_environments— 比较两个环境描述符。local(对象,必填)——本地描述符ci(对象,必填)——CI 描述符
每个描述符:
node(字符串)、os(字符串)、env(字符串映射)、lockfile_present(布尔值),均为可选。
Docker
docker run -i ghcr.io/cloudcorprecords/envdiff
docker run --rm -v "$PWD:/w" ghcr.io/cloudcorprecords/envdiff diff /w/local.json /w/ci.json
开发
npm install
npm run build # tsc -> dist/
npm test # tsx --test test/*.test.ts (pure local, no network)
npm run dev # run the CLI from source
许可证
MIT — 版权所有 (c) 2026 Rene Turcios
评论
支持 Markdown
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。