andriichuk / keepenv
KeepEnv 是一个基于规范文件的检查和管理环境变量的工具。
Requires
- php: ^7.4 || ^8.0
- ext-json: *
- ext-mbstring: *
- symfony/console: ^5.0 || ^6.0
- symfony/yaml: ^5.4
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.5
- josegonzalez/dotenv: ^3.2
- mikey179/vfsstream: 1.6.10
- phpunit/phpunit: ^9.5
- symfony/dotenv: ^5.4
- symfony/var-dumper: ^v5.4
- vimeo/psalm: ^4.16
- vlucas/phpdotenv: ^5.4
README
使用规范跟踪环境变量更改
目录
关于
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
环境。
使用预设(可用预设:laravel
,symfony
)
./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许可证。