反应本机Expo环境变量

时间:2019-10-07 12:58:04

标签: react-native environment-variables expo

因此,我对本文和其他文章中介绍的环境变量的概念感到满意 https://www.freecodecamp.org/news/how-to-gracefully-use-environment-variables-in-a-react-native-app/

太好了,我已经存储了SOMETHING =“ something”,所以我可以只使用env.SOMETHING或其他任何方式

我对有点迷惑的部分是保存实时变量的地方

我宁愿不做这样的解决方案,因为您似乎仍然保持密钥公开,并且只是根据环境使用if语句进行选择

Manage environment with expo react native

例如,对于我们拥有的Express App部署,我们指定

let endPointURL = env.endPointURL

然后我们在本地保留该变量的versoin,当它位于AWS上时,它会被here解释为AWS服务器覆盖

我只是想知道在Android和iOS版本(在各自的商店中)还是通过Expo存在类似的东西吗?

谢谢

2 个答案:

答案 0 :(得分:5)

一种更简单的方法是导出env对象而不是函数:

import Constants from 'expo-constants';
import { Platform } from "react-native";

const localhost =
 Platform.OS === "ios" ? "localhost:8080" : "10.0.2.2:8080";


const ENV = {
    dev: {
      apiUrl: localhost,
      amplitudeApiKey: null,
    },
    staging: {
      apiUrl: "[your.staging.api.here]",
      amplitudeApiKey: "[Enter your key here]",
      // Add other keys you want here
    },
    prod: {
      apiUrl: "[your.production.api.here]",
      amplitudeApiKey: "[Enter your key here]",
      // Add other keys you want here
    }
};

const getEnvVars = (env = Constants.manifest.releaseChannel) => {
  if (env === null || env === undefined || env === "" || env.indexOf("dev") !== -1) return ENV.dev;
  if (env.indexOf("staging") !== -1) return ENV.staging;
  if (env.indexOf("prod") !== -1) return ENV.prod;
}

const selectedENV = getEnvVars();

export default selectedENV;

// Import
import env from '..xxx/utility/env';

答案 1 :(得分:2)

老实说,我认为他们的做法有点愚蠢。可能有比这更好的方法,但是我认为我遵循了他们的文档建议。

https://docs.expo.io/versions/latest/distribution/release-channels/#using-release-channels-for-environment-variable-configuration

他们有一个代码段,建议您创建一个功能来查看发行版本身。

我认为您可以执行以下代码,并将环境变量存储在variables.js文件中,并像这样提取环境变量。

import Constants from 'expo-constants';

export const prodUrl = "https://someapp.herokuapp.com";

const ENV = {
  dev: {
    apiUrl: "http://localhost:3000"
  },
  staging: {
    apiUrl: prodUrl
  },
  prod: {
    apiUrl: prodUrl
  }
};

function getEnvVars(env = "") {
  if (env === null || env === undefined || env === "") return ENV.dev;
  if (env.indexOf("dev") !== -1) return ENV.dev;
  if (env.indexOf("staging") !== -1) return ENV.staging;
  if (env.indexOf("prod") !== -1) return ENV.prod;
}

export default getEnvVars(Constants.manifest.releaseChannel);