jchook/dotenv-to-php

将dotenv文件转换为PHP

安装量: 1,335

依赖: 0

建议: 0

安全性: 0

星标: 3

关注者: 3

分支: 0

开放问题: 0

语言:Shell

v1.0.3 2018-06-23 23:21 UTC

This package is not auto-updated.

Last update: 2024-09-15 05:02:55 UTC


README

将dotenv文件转换为PHP。

Demo of dotenv-to-php

为什么使用它?

将配置存储在环境中是Twelve Factor App的原则之一,并且具有许多优点。例如,它允许您将密码与代码分开。

然而,在开发机器或运行多个项目的持续集成服务器上设置环境变量并不总是实用的。在这些场景中,我们可以按需从.env文件中加载变量。

我们不需要在运行时使用复杂的PHP依赖关系解析.env,而是可以使用dotenv-to-php将我们的.env编译为原生PHP。

  1. 它很快。 转换是瞬时的。在运行时,只需使用生成的PHP加载您的环境变量。您甚至可以在生产环境中使用它。

  2. 它很简单。 没有运行时依赖。转译器只有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$_ENVgetenv()可用。

<?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。