tekill / env-diff
检查环境文件之间的差异并相互更新
Requires
- php: >=5.6
- symfony/console: ~2.8|~3.0|~4.0
Requires (Dev)
- composer/composer: 1.0.*@dev
- phpunit/phpunit: ^5.0
README
EnvDiff 是一个比较环境键并找出 .env 文件与实际环境差异的工具。
安装
composer require tekill/env-diff
手动运行
更新变量
比较 .env
与 .env.dist
并将缺失的变量添加到 .env
文件中。
php ./vendor/bin/env-diff actualize
比较 .env
与 .env.example
并将缺失的变量添加到 .env
文件中。
php ./vendor/bin/env-diff actualize .env.example
比较 .env-target
与 .env.example
并将缺失的变量添加到 .env-target
文件中。
php ./vendor/bin/env-diff actualize .env.example .env-target
如果您想删除过时的值,只需运行带有 -k=false
选项的命令。
php ./vendor/bin/env-diff actualize -k=false
显示差异
命令具有相同的界面、参数和选项。
比较 .env
与 .env.dist
并显示它们之间的差异。
php ./vendor/bin/env-diff diff
Composer 脚本
在 composer.json
中添加代码块
"scripts": {
"post-update-cmd": "LF\\EnvDiff\\Composer\\ScriptHandler::actualizeEnv"
}
然后,通过 composer 脚本创建或更新 .env
文件,通过询问您缺失的变量来匹配 dist 文件 .env.dist
的结构。
默认情况下,假定 dist 文件与目标 .env
文件位于同一位置,后缀为 .dist
。这可以在配置中更改。
{ "extra": { "lf-env-diff": [ { "dist": "path/to/env.dist", "target": "path/to/.env" } ] } }
脚本处理程序将交互式地询问您目标环境文件中缺失的变量,使用 dist 文件中的值作为默认值。如果以非交互模式运行 composer --no-interaction
,则使用 dist 文件中的值用于缺失变量。
警告:此处理程序将覆盖目标 .env
文件中的任何注释或空格,因此请谨慎处理。
管理多个忽略的文件
处理程序可以管理多个忽略的文件。要使用此功能,lf-env-diff
扩展应包含一个包含多个配置的 JSON 数组,而不是配置对象。
{ "extra": { "lf-env-diff": [ { "dist": "path/to/.env.dist", "target": "path/to/.env" }, { "dist": "path/to/.env.dist", "target": "path/to/.env-test", "keep-outdated": false } ] } }
显示差异
在 composer.json
中添加代码块
"scripts": {
"post-update-cmd": "LF\\EnvDiff\\Composer\\ScriptHandler::showDifference"
}
此处理程序的行为与前面描述的相同。
Git 钩子
您可以使用在执行任何 'git pull' 操作后触发的 Git 钩子。这对于更新任何 Web 应用程序依赖项或同步配置很有用。
在项目的 .git/hooks
目录中创建 post-merge
钩子。
#/usr/bin/env bash
changed_files="$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)"
check_run() {
echo "$changed_files" | grep -E --quiet "$1" && eval "$2"
}
# Actualize env files if the `env.dist` file gets changed
check_run env.dist "php ./vendor/bin/env-diff actualize"