Fastlane:如何根据 --env 从父目录加载 .env 文件
Posted
技术标签:
【中文标题】Fastlane:如何根据 --env 从父目录加载 .env 文件【英文标题】:Fastlane: How to load .env file from parent directory according to --env 【发布时间】:2021-08-10 14:15:46 【问题描述】:-
我知道 Fastlane 会自动从
.env
、.env.default
和.env.environment
加载变量,其中environment
由fastlane
命令中的标志--env
提供。
在我的Fastfile
中,我需要 fastlane 来加载我的环境文件,这些文件位于父目录中。
我想保持加载.env.environment
文件的加载行为,当environment
根据我在--env
标志中传递的内容发生变化时。
【问题讨论】:
【参考方案1】:我最终在 platform
块内使用了 before_all
:
before_all do |lane|
Dotenv.overload '../../.env'
environment = lane_context[SharedValues::ENVIRONMENT]
unless environment.nil?
puts "Load .env file of #environment"
Dotenv.overload '../../.env.' + environment
end
end
并且还在fastlane
目录中放置一个空白的.env
文件。
创建一个空的.env
的原因记录在我的空.env
文件中:
TL;DR:不要删除这个空文件
这个文件是空白的,让 Fastlane 定义
SharedValue::ENVIRONMENT
变量,这是我们fastlane/Fastfile
配置的一部分。正如您在 Fastlane 的
cli_tools
中看到的, Fastlane 从ARGV
中删除--env
索引pretty early 所以我们无法知道用户传递给--env
参数的内容。不幸的是,Fastlane 仅在
fastlane
文件夹中搜索 .env 文件 在它的父文件夹中(在我们的例子中是ios
文件夹)。代表着, 在我们的项目中,fastlane 不会找到任何 .env 文件。 (Source)Fastlane 找不到 .env 文件时,不会调用该函数
load_dot_envs_from
,负责定义SharedValue::ENVIRONMENT
变量,我们在 Fastfile 中使用 (Source)这个文件是一个 hack,它会让 Fastlane 找到一个空的
.env
文件。 然后它将SharedValue::ENVIRONMENT
设置为 ARGV 值。 然后我们在 Fastlane 中使用SharedValue::ENVIRONMENT
来加载正确的 从正确的位置文件。
【讨论】:
以上是关于Fastlane:如何根据 --env 从父目录加载 .env 文件的主要内容,如果未能解决你的问题,请参考以下文章