安装包时向 .env 添加新的环境变量

Posted

技术标签:

【中文标题】安装包时向 .env 添加新的环境变量【英文标题】:Add new environment variables to .env when installing a package 【发布时间】:2021-01-21 12:38:21 【问题描述】:

在我们公司,多个内部项目依赖相同的复制代码部分来处理与相同 API 的连接(例如:Google Suite、JIRA...)。为了避免为新项目一遍又一遍地复制相同的代码,我想创建收集这些 A​​PI 类的 Symfony 包。

棘手的部分:我正在寻找一种将必要的环境变量自动添加到.env 的方法,就像Symfony's recipe structure does it 一样。但由于这些项目只能在内部使用,因此将它们的配方配置推送到公共存储库对我来说是不行的。添加自定义配方服务器(如 moay 的服务器)对我来说很有趣,但需要在每个项目中进行额外配置 composer.json

有没有更好的方法来解决这个问题,这样我就可以在我的项目中简单地定义所需的变量,这样它们就可以添加到.env 而无需任何额外的魔法?

注意:任何需要symfony/flex 的东西都可以,因为这应该是我们公司所有新项目的一部分

这些是我想避免的解决方案:

将配置添加到捆绑包/包本身,以便将这些配置值置于版本控制之下 通过安装后手动运行的任何其他命令添加配置

【问题讨论】:

您要添加什么类型的变量?它们会更适合作为配置变量吗? 有一个open issue 允许全局配置端点。如果它得到实施,您可以将其添加到开发人员配置文件中。 @craigh 配置包含两个变量,就像在我的其他项目中一样,我想为此使用 env 变量,因为这些变量不应置于源代码控制之下 “本地”是什么意思? composer require 仅在开发人员机器上运行,但我看不到与 Docker 的连接 @UrmatZhenaliev 你能分享更多关于那个“环境配置器”的细节吗?据我所知,它只适用于公共食谱 【参考方案1】:

您可以在此过程中使用作曲家事件。安装包后,使用 symfony 命令将其添加到 .env 文件中。

https://getcomposer.org/doc/articles/scripts.md

Composer unable to run post install script

symfony composer.json 文件中有一个示例。

...
"scripts": 
    "auto-scripts": 
        "cache:clear": "symfony-cmd",
        "assets:install %PUBLIC_DIR%": "symfony-cmd"
    ,
    "post-install-cmd": [
        "@auto-scripts"
    ],
    "post-update-cmd": [
        "@auto-scripts"
    ]
,
...

每次更新或安装后,运行此命令“post-update-cmd, post-install-cmd”。

【讨论】:

你能分享更多细节吗?在已经需要包本身之后编辑composer.json以添加脚本等配置是我想要避免的事情 Symfony flex 使用相同的逻辑。它将安装包时所需的参数添加到 .env 文件。您将对作曲家事件做同样的事情。 在安装你的包时,你会用 shell 或 php 将你想要的参数添加到 .env 文件中。 不,手动添加参数是绝对不行的,毕竟 Symfony 的配方不是这样工作的 例如,这是 Doctrine 的 bundle 的配置,用于将 DATABASE_URL 添加到您的项目中:github.com/symfony/recipes/blob/master/doctrine/doctrine-bundle/… - 无需在 composer.json 中进行额外配置,无需手动工作,Flex 完成所有工作给你【参考方案2】:

在 Symfony 中,.env 文件现在已提交到存储库中。所以把敏感数据放在上面不是一个好习惯。

更好的解决方案是创建一个文件名.env.local。此文件未提交,它会覆盖 .env 中的所有环境值

所以你可以在.env

MY_SENSITIVE_DATA=mypersonalkey

在你的.env.local

MY_SENSITIVE_DATA=the_real_sensitive_data

来源:https://symfony.com/doc/current/configuration.html#overriding-environment-values-via-env-local

【讨论】:

我还没有谈到在这些变量中使用敏感配置,我只是在寻找一种方法,在需要包时自动将它们放入.env

以上是关于安装包时向 .env 添加新的环境变量的主要内容,如果未能解决你的问题,请参考以下文章

Node环境变量Process.env

.env前端环境变量配置

vue中如何添加自定义环境变量 ,process.env取值报错undefined

linux下配置自己的环境变量文件my_env.sh

vite的环境变量 import.meta.env

怎么查看ubuntu里面的环境变量