italevski/env-diff

检查环境文件之间的差异并相互更新

1.0.1 2024-06-06 09:12 UTC

This package is auto-updated.

Last update: 2024-09-06 09:44:46 UTC


README

Latest Version on Packagist Software License Build Status Coverage Status Quality Score

EnvDiff 是一个比较环境键的工具,用于查找 .env 文件之间的差异并更新它们。

Example cast

安装

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"