jchook / dotenv-to-php
将dotenv文件转换为PHP
Requires
- php: >=5.3.0
This package is not auto-updated.
Last update: 2024-09-15 05:02:55 UTC
README
将dotenv文件转换为PHP。
为什么使用它?
将配置存储在环境中是Twelve Factor App的原则之一,并且具有许多优点。例如,它允许您将密码与代码分开。
然而,在开发机器或运行多个项目的持续集成服务器上设置环境变量并不总是实用的。在这些场景中,我们可以按需从.env文件中加载变量。
我们不需要在运行时使用复杂的PHP依赖关系解析.env,而是可以使用dotenv-to-php
将我们的.env编译为原生PHP。
-
它很快。 转换是瞬时的。在运行时,只需使用生成的PHP加载您的环境变量。您甚至可以在生产环境中使用它。
-
它很简单。 没有运行时依赖。转译器只有42行代码(含注释),不包含正则表达式,也没有自定义解析器。与phpdotenv相比。
1. 安装
您可以直接下载单个文件 -或者- 通过composer将其添加为开发依赖项。
composer require --dev jchook/dotenv-to-php
2. 创建.env
如果您还没有,请创建一个位于项目根目录的.env
文件。将所有环境特定变量(可能在服务器之间或部署之间发生变化的内容)分别放在单独的一行上,如下所示
# Application APP_HOST="myapp.com" APP_URI="https://$APP_HOST/" APP_NAME="My Application" # Database DB_HOST=localhost DB_USER=myapp DB_PASS=mypass
请注意,您应该用引号括住包含空格等的值,并且可以像在正常shell环境中一样引用之前定义的变量。以#
开头的注释将被忽略。
不要将.env文件提交到源代码控制。 相反,将其存储在安全的地方,或使用类似vault的工具。
3. 构建.env.php
只需通过命令行调用bin/dotenv-to-php
,即可将您的.env文件转换为PHP。
/path/to/dotenv-to-php
用法大致为dotenv-to-php [infile] [outfile]
。如果没有指定infile或outfile,则默认为.env
和$infile.php
。您也可以指定-
(破折号)分别表示stdin或stdout。
4. 集成
在您的PHP应用程序中,只需包含编译好的.env.php
文件。加载的环境变量将通过$_SERVER
、$_ENV
和getenv()
可用。
<?php // somewhere in index.php include_once __DIR__ . '/.env.php'; // Anywhere you need it... echo $_SERVER['DB_USER']; // myapp ?>
理想情况下,您可以将.env.php
文件生成集成到现有的构建过程中(无论是CI还是本地开发)。以下所有示例都假设您的dotenv文件以.env
的形式保存在当前工作目录中。
Composer
如果您通过composer安装,您可以将它作为脚本集成到composer.json
文件中
{ "scripts": { "build-env": "dotenv-to-php .env .env.php" } }
然后通过以下方式调用
composer build-env
Node JS
许多人使用node js来编译静态资产,如javascript。如果您想将其集成到现有的构建过程中,可以使用内置的child_process模块。
const childProcess = require('child_process'); childProcess.spawn('/path/to/dotenv-to-php', ['.env', '.env.php']);
Webpack 4+
您可以将上述内容轻松地整合到一个临时的webpack插件中。在您的webpack.config.js
文件中
const childProcess = require('child_process'); module.exports = { // ... other config here ... plugins: [ // ... other plugins here ... // Build PHP env {apply: (compiler) => { compiler.hooks.afterEnvironment.tap('DotEnvToPhp', (compilation) => { childProcess.spawn('/path/to/dotenv-to-php', ['.env', '.env.php']); }); }} ] };
许可证
MIT。