portrino/companienv

.env 文件的伴侣

4.0.0 2024-08-04 13:15 UTC

This package is auto-updated.

Last update: 2024-09-04 13:27:28 UTC


README

Latest Stable Version License Total Downloads Tests

Companienv

您的 .env 文件伴侣。现在大家都知道 12 factor环境变量。许多框架,如 Symfony 使用 .env 文件 来配置应用程序,但我们没有帮助用户完成本地 .env 文件的工具。

Companienv 将帮助您管理 .env 文件,从代码仓库中的参考 .env.dist 版本开始。Companienv 可以

用法

  1. portrino/companienv 作为项目的依赖项要求
composer req portrino/companienv
  1. 运行您的伴侣
vendor/bin/companienv

Composer 自动化

您可以通过配置 composer.json 文件中的脚本,在执行 composer installcomposer update 命令后自动运行 Companienv

{
    "scripts": {
        "post-install-cmd": [
            "Companienv\\Composer\\ScriptHandler::run"
        ],
        "post-update-cmd": [
            "Companienv\\Composer\\ScriptHandler::run"
        ]
    }
}

默认情况下,用作模板的文件是 .env.dist,写入的文件是 .env。您可以在 composer.json 文件中更改这些默认值

{
    "extra": {
        "companienv-parameters": [
            {
                "file": ".env.foo",
                "dist-file": ".env.foo.dist"
            }
        ]
    }
}

.env.dist 文件

所有配置都直接在 .env.dist 文件中,作为注释。配置分为多个块,以便用户更好地理解配置。以下是 Companienv 的基础

  • 块。它们逻辑上组合变量。它们由标题(以双注释 ## 开头的行)和描述(下面每一行注释)定义
  • 属性。由以 #+ 开头的行定义,属性与一个或多个变量相关联。这些属性是扩展的入口点。在上面的示例中,它表明 JWT_* 变量与 RSA 密钥对相关联,因此 Companienv 将自动向用户推荐为他们生成一个。
  • 注释。#~ 开头的行将被 Companienv 忽略。

.env.dist 文件的示例

# .env.dist

## Welcome in the configuration of [my-project]
#
#~ Please run the `bin/start` command.
#~ These lines starting with `~` are not going to be displayed to the user

## GitHub
# In order to be able to login with GitHub, you need to create a GitHub application. To get access to the code
# repositories, you need to create a GitHub integration.
#
#+file-to-propagate(GITHUB_INTEGRATION_KEY_PATH)
#
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
GITHUB_INTEGRATION_ID=
GITHUB_INTEGRATION_KEY_PATH=
GITHUB_SECRET=

## Security
# We need sauce! Well, no, we need an SSL certificate.
#
#+rsa-pair(JWT_PRIVATE_KEY_PATH JWT_PUBLIC_KEY_PATH JWT_PRIVATE_KEY_PASS_PHRASE)
#
JWT_PRIVATE_KEY_PATH=/runtime/keys/jwt-private.pem
JWT_PUBLIC_KEY_PATH=/runtime/keys/jwt-public.pem
JWT_PRIVATE_KEY_PASS_PHRASE=

## Another block
# With its (optional) description
AND_OTHER_VARIABLES=

内置扩展

only-if 扩展

如果某些其他变量禁用了特定功能,某些 .env 文件的块可能甚至不相关。

示例:如果 INTERCOM_ENABLED 的值(当前或用户输入)为 true,则仅询问 INTERCOM_APPLICATION_ID 变量。

## Support & Feedback
# If you would like to allow your users to get some support from you, give you some feedback and this
# sort of things, select the integrations you'd like.
#
#+only-if(INTERCOM_APPLICATION_ID):(INTERCOM_ENABLED=true)
#
INTERCOM_ENABLED=false
INTERCOM_APPLICATION_ID=none

file-to-propagate 扩展

询问现有文件的路径并将其复制到引用中提到的目的地。

示例:这将要求用户提供现有文件的路径。它将此文件复制到项目根目录相对路径 /runtime/keys/firebase.json

#+file-to-propagate(FIREBASE_SERVICE_ACCOUNT_PATH)
FIREBASE_SERVICE_ACCOUNT_PATH=/runtime/keys/firebase.json

rsa-pair 扩展

如果公钥/私钥对不存在,Companienv将为用户生成一对。

#+rsa-pair(JWT_PRIVATE_KEY_PATH JWT_PUBLIC_KEY_PATH JWT_PRIVATE_KEY_PASS_PHRASE)
JWT_PRIVATE_KEY_PATH=/runtime/keys/jwt-private.pem
JWT_PUBLIC_KEY_PATH=/runtime/keys/jwt-public.pem
JWT_PRIVATE_KEY_PASS_PHRASE=

ssl-certificate-extension

类似于RSA密钥对:如果尚未存在,Companienv将提供生成自签名的SSL证书。

#+ssl-certificate(SSL_CERTIFICATE_PRIVATE_KEY_PATH SSL_CERTIFICATE_CERTIFICATE_PATH SSL_CERTIFICATE_DOMAIN_NAME)
SSL_CERTIFICATE_PRIVATE_KEY_PATH=/runtime/keys/server.key
SSL_CERTIFICATE_CERTIFICATE_PATH=/runtime/keys/server.crt
SSL_CERTIFICATE_DOMAIN_NAME=

您自己的扩展

您可以使用Companienv轻松创建和使用自己的扩展。为此,您需要使用您自己的PHP文件启动Companienv,并使用ApplicationregisterExtension方法。

use Companienv\Application;
use Companienv\Extension;

$application = new Application($rootDirectory);
$application->registerExtension(new class() implements Extension {
    // Implements the interface...
});
$application->run();

致谢与鸣谢

本项目受到并基于以下这些出色的开源项目的启发和基础