andriichuk/keepenv

KeepEnv 是一个基于规范文件的检查和管理环境变量的工具。

0.3.0 2022-02-06 08:21 UTC

This package is auto-updated.

Last update: 2024-09-11 12:56:46 UTC


README

SWUbanner

使用规范跟踪环境变量更改

Logo

License: MIT Tests Code coverage Psalm type coverage Psalm level Stars Quality Gate Status

目录

关于

KeepEnv 是一个基于规范文件的 CLI 工具,用于检查和管理环境变量。

动机

  • 我想有一种方式来描述一个规范文件中的所有环境变量。
  • 我想确保在部署应用程序之前,所有必需的变量都正确填写。
  • 我不想在运行时检查变量。
  • 我想跟踪当我的同事添加新环境变量时的变化。
  • 我想有一种方便且安全的方式填写新变量。
  • 我想从不同的状态提供者检查变量(系统 $_ENV,从 .env 文件 + 系统,或仅从 .env 文件)。
  • 我不想手动描述所有 100+ 个现有的环境变量。
  • 我想使用一个不依赖于特定框架的工具,因为我与多个框架一起工作。

特性

  • 基于当前的 .env 文件生成环境规范。
  • 环境变量验证。
  • 在环境之间分割变量定义。
  • 从特定环境扩展变量,例如从 common 扩展 local
  • .env 文件中分割系统 ($_ENV) 和常规变量。
  • 通过控制台命令填充缺失变量的能力。

支持的 dotenv 文件状态加载器

安装

安装 composer 包

composer require andriichuk/keepenv

初始化

此命令允许您根据当前 .env 结构生成新的环境规范文件。

基本用法

./vendor/bin/keepenv init

这将创建一个规范文件(keepenv.yaml)在您的根目录中,并带有 common 环境。

使用预设(可用预设:laravelsymfony

./vendor/bin/keepenv init --preset=laravel

对于 Laravel Sail

./vendor/bin/sail php ./vendor/bin/keepenv init --preset=laravel

vlucas/dotenv 使用自定义 .env 文件(.env 文件的文件夹路径)

./vendor/bin/keepenv init --env-file=./ --env-file=./config/

symfony/dotenv 使用自定义 .env 文件(直接文件路径)

./vendor/bin/keepenv init --env-file=./.env --env-file=./.env.local

环境文件读取器将自动检测,但您可以自定义它

./vendor/bin/keepenv init --env-reader=symfony/dotenv --env-file=./.env

验证

使用此命令,您可以根据规范文件 keepenv.yaml 检查您的环境变量。

基本用法

./vendor/bin/keepenv validate common

仅检查系统变量($_ENV),而不查看 .env 文件

./vendor/bin/keepenv validate common --env-provider=system

使用 --help 选项检查其他参数。

填充

此命令允许您填充和验证来自您的 .env 文件中缺失的变量值(使用 --help 查看所有选项列表)。

命令

./vendor/bin/keepenv fill

对于特定环境

./vendor/bin/keepenv fill --env=common

添加

以下命令可以帮助您将新的变量定义添加到规范和 .env 文件中

./vendor/bin/keepenv add

导出

使用此命令,您可以导出 keepenv.yaml 文件中定义的所有变量到自定义的 .env 文件中。

根据 keepenv.yaml 中定义的变量创建新的 .env 文件(等同于 cp .env.example .env)。变量将仅使用默认值填充。也许现在您可以删除 .env.example 文件

./vendor/bin/keepenv dump

将系统变量导出到文件

./vendor/bin/keepenv dump --target-env-file=./.env.system --env-provider=system --with-values=true

根据production环境规范和当前.env文件,创建一个新的.env.stage文件

./vendor/bin/keepenv dump --env=production --target-env-file=./.env.stage --env-file=./ --with-values=true

语法

目前,仅支持YAML语法格式。

环境定义

version: '1.0'
environments:
    common:
        variables:
        # ...
    local:
        extends: common
        variables:
        # ...
    testing:
        variables:
        # ...

变量定义

  • 描述变量的用途
SESSION_LIFETIME:
    description: 'Session lifetime in minutes.'
  • 标记变量应该在.env文件中跟随export关键字(例如:export APP_LOCALE=en
APP_LOCALE:
    export: true
  • 标记变量应该在服务器端设置($_ENV$_SERVER),而不是从.env文件中设置
APP_TIMEZONE:
    system: true
  • 指定默认值(请只用于非敏感数据)
REDIS_PORT:
    default: 6379
  • 描述验证规则
    • 标记变量为必填
    APP_ENV:
        rules:
            required: true
    • 检查变量值是否为字符串(通常可以省略,因为默认情况下所有.env文件中的值都被读取为字符串)
    APP_ENV:
        rules:
            string: true
    • 字符串长度范围
    APP_KEY:
        rules:
            string:
                min: 32
                max: 60
    • 数值
    REDIS_PORT:
        rules:
            numeric: true
    • 布尔值(true/false,开/关,是/否,1/0)
    APP_DEBUG:
        rules:
            boolean: true
    • 自定义选项的布尔值
    PAYMENT_FEATURE:
        rules:
            boolean:
                'true': Y
                'false': N
    • 电子邮件地址
    MAIL_FROM_ADDRESS:
        rules:
            email: true
    • 枚举
    APP_ENV:
        rules:
            enum:
                - local
                - production
    • 表示变量的值必须等于(==)特定的值。
    APP_ENV:
        rules:
            equals: local
    • IP地址
    DB_HOST:
        rules:
            ip: true

完整示例

version: '1.0'
environments:
    common:
        variables:
            APP_NAME:
                description: 'Application name.'
            APP_ENV:
                description: 'Application environment name.'
                default: local
                rules:
                    required: true
                    enum:
                        - local
                        - production
            APP_DEBUG:
                rules:
                    boolean: true
            DB_HOST:
                description: 'Database host.'
                default: 127.0.0.1
                rules:
                    required: true
                    ip: true
            DB_PORT:
                description: 'Database port.'
                default: 3306
                rules:
                    required: true
                    numeric: true

    local:
        extends: common
        variables:
            APP_ENV:
                rules:
                    equals: local

    testing:
        variables:
            DB_DATABASE:
                description: 'Database name.'
                default: testing
                rules:
                    required: true
            DB_USERNAME:
                description: 'Database username.'
                rules:
                    required: true
            DB_PASSWORD:
                description: 'Database password.'
                rules:
                    required: true

技巧

使用equals规则来检查特定环境值,例如,对于APP_ENV的有用示例

version: '1.0'
environments:
    common:
        variables:
            APP_ENV:
                rules:
                    required: true
                    enum:
                        - local
                        - production
            # ...
    production:
        extends: common
        variables:
            APP_ENV:
                rules:
                    equals: production

可以为新的环境变量填充和验证添加composer脚本

"scripts": {
    "keepenv": "./vendor/bin/keepenv fill && ./vendor/bin/keepenv validate",
},

然后使用

composer keepenv common

您还可以在post-update-cmd composer事件中定义常见的keepenv,这样每次执行composer update后都会运行环境填充和验证

"scripts": {
    "post-update-cmd": [
        "@keepenv common"
    ]
},

贡献

欢迎贡献、问题和功能请求。
如果您想贡献,请随意检查问题页面查看贡献指南

鸣谢

许可证

版权所有 © 2022 Serhii Andriichuk
本项目采用MIT许可证。