Expo 应用无法从 Github 操作中看到环境变量

Expo app cannot see env variable from Github action

我们将配置存储在保管库中,在 Github 操作工作流程中,我们提取它并打算在构建期间将其用于应用程序。

这是我们的工作流程

- name: Get app configs from vault
  env:
    ENVIRONMENT: development
  run: |
    chmod +x scripts/ci/get-app-configs.sh
    scripts/ci/get-app-configs.sh
    echo "action_state=yellow" >> $GITHUB_ENV

- name: Set .env to process.env of github actions
  uses: cardinalby/export-env-action@v1
  with:
    envFile: '.env'
    expand: 'true'

- name: Generate APK
  env:
    EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }}
  run: |
    echo "${{ env.action_state }}"
    echo ${{ env.FIREBASE }}
    eas build --platform android --local --profile development --non-interactive

Get app configs from vault 步骤创建一个 .env 文件,其内容如下

FIREBASE={firebase_config_string}

然后在 firebase.ts 里面我们这样做。

const firebaseConfig = JSON.parse(process.env.FIREBASE as string) as FirebaseOptions;

该应用在模拟器上测试时运行良好,但在物理设备上测试实际 APK 时,它总是崩溃。在 logcat 我一直看到这个错误 E AndroidRuntime: com.facebook.react.common.JavascriptException: SyntaxError: JSON Parse error: Unexpected identifier "undefined", stack:.

我已经将它缩小到 firebase.ts process.env 因为当配置被硬编码时应用程序不会崩溃。

我可以将 env.FIREBASE 视为 Generate APK 步骤中的环境变量,因此它可以正常传递给其他步骤。 echo 也打印出值 fine.

是否无法在构建期间在代码中访问 Github 操作的环境变量?或者还有其他方法可以实现吗?

保持 github 工作流程不变。

已使用 expo-constants 修复。

app.json 重命名为 app.config.js 以便能够添加以下行:

import 'dotenv/config';

export default {
  expo: {
    extra: {
      ENV_VAR: process.env.ENV_VAR,
    },
  },
};

并通过

从应用程序访问所述变量
import Constants from 'expo-constants';

const ENV_VAR = Constants.manifest?.extra?.ENV_VAR