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 加载变量,其中environmentfastlane 命令中的标志--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 文件的主要内容,如果未能解决你的问题,请参考以下文章

Fastlane 根据试飞中先前的内部版本号增加内部版本号

Fastlane:如何自动获取 Apple ID 的登录会话?

iOS - 如何在 fastlane 快照中传递构建参数

Fastlane:将工件发送到外部组

如何在子文件夹中运行 Fastlane 操作

如何根据第二个矩阵(子)中的列值从父矩阵中提取行