因此,我对本文和其他文章中介绍的环境变量的概念感到满意 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存在类似的东西吗?
谢谢
答案 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)
老实说,我认为他们的做法有点愚蠢。可能有比这更好的方法,但是我认为我遵循了他们的文档建议。
他们有一个代码段,建议您创建一个功能来查看发行版本身。
我认为您可以执行以下代码,并将环境变量存储在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);