安装包时向 .env 添加新的环境变量
Posted
技术标签:
【中文标题】安装包时向 .env 添加新的环境变量【英文标题】:Add new environment variables to .env when installing a package 【发布时间】:2021-01-21 12:38:21 【问题描述】:在我们公司,多个内部项目依赖相同的复制代码部分来处理与相同 API 的连接(例如:Google Suite、JIRA...)。为了避免为新项目一遍又一遍地复制相同的代码,我想创建收集这些 API 类的 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 添加新的环境变量的主要内容,如果未能解决你的问题,请参考以下文章