tekill / env-diff
检查 env 文件之间的差异并互相更新
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 钩子,在每次 'git pull' 之后触发,当指定的文件之一发生变化时。这对于更新任何 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"