Expo应用程序无法从Github操作中看到env变量



我们将配置存储在仓库中,在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时,它总是崩溃。在日志中,我一直看到这个错误E AndroidRuntime: com.facebook.react.common.JavascriptException: SyntaxError: JSON Parse error: Unexpected identifier "undefined", stack:

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

我可以看到env.FIREBASE作为Generate APK步骤内的env变量,所以它被传递给其他步骤。并且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

最新更新