marcin-orlowski / process-dotenv
一个小工具,帮助从模板中构建 DotEnv (.env) 文件
Requires
- php: >=5.1.2
Requires (Dev)
README
.env
(又称 DotEnv)文件通常用于存储项目配置(例如,用于基于 Laravel 的 PHP 项目)。由于它们通常包含敏感信息,如 API 密钥或数据库凭据,因此 .env
文件不应被版本控制。这也意味着如果您需要在自动化管道中使用/运行项目,例如使用 TeamCity 或 Travis-CI 等持续集成(CI)工具,则在使用代码之前需要创建适当的 .env
文件。由于 .env
文件通常包含所有项目配置,因此除了 API 密钥之外,还有更多字段。此外,随着项目的发展,可以添加新条目,现有条目也可以更改或调整。创建 .env.dist
文件是开发人员的常见做法,尽可能多地填充(省略敏感信息),并将其放入版本控制系统。
因此,如果我们把所说的 .env.dist
作为 模板文件,那么有了正确的工具,我们就可以轻松地创建相应的 .env
文件。这就是 process-dotenv
的用武之地。这个小工具的目标非常简单 - 根据模板 .env.dist
生成 .env
文件,使用提供的值(从环境变量或作为调用参数提供)填充/替换指定的模板密钥。
注意:每当我说 .env
或 .env.dist
时,我仅指 文件格式,而不是文件名。您可以随意命名文件名,只要其内容遵循 dot-env 文件格式即可!
注意:为了避免意外覆盖,process-dotenv
将处理后的内容输出到标准输出。要创建物理 .env
文件,需要将标准输出重定向到文件。请参阅示例以获取更多详细信息。
环境变量替换
注意:所有示例都模仿 shell 会话,因此省略 $
行以在脚本中使用。
假设我们的 .env.dist
模板文件如下所示
KEY=val
BAR=zen
FOO=
现在,假设我们知道您的应用程序需要 KEY
是有效的 API 密钥才能通过测试,我们可以用 process-dotenv
替换它
$ KEY=barbar
$ vendor/bin/process-dotenv .env.dist > .env
这将生成以下内容的 .env
文件
KEY=barbar
BAR=zen
FOO=
如您所见,KEY
的原始值被我们通过环境变量提供的值所替换,而 BAR
和 FOO
(我们没有提供替换)则未更改地复制。
参数替换
除了环境变量之外,您还可以通过 process-dotenv
调用参数传递 key=val
对,以实现相同的结果
$ vendor/bin/process-dotenv .env.dist KEY=barbar > .env
重要:第一个参数始终指源 dot-env 文件,后跟(可选的)KEY=VAL
对。您可以传递所需的对数,文件名可以是您喜欢的任何名称。
组合替换
两种替换方法都可以一起使用。当密钥既作为参数提供又作为环境变量存在时,命令行提供的值具有优先权
$ KEY=barbar
$ vendor/bin/process-dotenv .env.dist KEY=value > .env
将生成
KEY=value
BAR=zen
FOO=
需求
- PHP 5+(CLI)
安装
使用 composer 将此包作为依赖项安装
$ composer require marcin-orlowski/process-dotenv
它将在通常的 vendor/bin
文件夹中安装 process-dotenv
脚本。
故障排除
请记住,某些,尤其是通用的键名可能已经被您的shell或系统设置。例如 USER
通常存在,并持有当前登录用户的id,HOME
指向该用户的家目录等,这些变量已经设置。您可以使用 printenv
或 export
列出所有这些变量,以确保您的键没有与之匹配,但养成更富有创造性的习惯,避免使用如此简短且可能冲突的名称是个好习惯。
要检查您的 .env.dist
是否使用了这种“危险”的键,可以不提供任何自己的替换并运行 process-dotenv
,然后将结果文件与dist文件进行比较。
$ vendor/bin/process-dotenv .env.dist | diff .env.dist
如果您遇到冲突,您可以更改您的键,或者至少通过命令行参数替换该键,以确保系统的值不会污染您生成的 .env
。
$ vendor/bin/process-dotenv .env.dist USER= HOME= > .env
但这很容易出错,并不推荐使用。
注意:如果您使用的是冲突键(即 USER
),但您希望保留 .env.dist
中设置的值,您目前必须将其作为命令行配对传递。process-dotenv
无法判断哪个环境变量是“好的”,哪个是“坏的”,因此一旦找到存在的一个,它将直接使用其值。这就是为什么您必须通过命令行配对来覆盖它。
许可证
- 版权所有 © 2016-2021 by Marcin Orlowski
- Process Dotenv 工具是开源软件,根据 MIT 许可证 许可。