Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
React native 如何在react native(expo)中安全保管我的钥匙?_React Native_Expo - Fatal编程技术网

React native 如何在react native(expo)中安全保管我的钥匙?

React native 如何在react native(expo)中安全保管我的钥匙?,react-native,expo,React Native,Expo,我有3个发布渠道-开发、质量保证和产品 const ENV_MODES = { dev: { }, prod: { }, qa: { } } ENV_MODES.default = ENV_MODES.prod const getEnvVars = channel => { if (process.env.NODE_ENV !== 'production') return ENV_MODES.dev if (channel === null ||

我有3个发布渠道-开发、质量保证和产品

const ENV_MODES = {
  dev: {

  },
  prod: {

  },
  qa: { 

  }
}

ENV_MODES.default = ENV_MODES.prod

const getEnvVars = channel => {
  if (process.env.NODE_ENV !== 'production') return ENV_MODES.dev
  if (channel === null || channel === undefined || channel === '') return ENV_MODES.prod
  if (channel.startsWith(ENV_DEV)) return ENV_MODES.dev
  if (channel.startsWith(ENV_QA)) return ENV_MODES.qa
  if (channel.startsWith(ENV_PROD)) return ENV_MODES.prod
  return ENV_MODES.default
}

const ENV = getEnvVars(Constants.manifest.releaseChannel)
但我不想把钥匙放在回购协议上。 我该怎么处理?据我所知,当我将在qa频道发布时,我不能期望我将拥有
节点\u ENV===='qa'
,您可以使用并将密钥添加到
.ENV
文件,并将其添加到
.gitignore
。这样,您就不会对repo按下键,并且可以根据代码运行的环境更改变量

要使用lib,您只需将其添加到
devDependencies
并将其添加到
babel.config.js
文件中,如下所示:

module.exports = function (api) {
  api.cache(true);
  return {
    presets: [
      'babel-preset-expo',
      'module:react-native-dotenv',
    ],
  };
};

编辑

NODE\u ENV
将与您的发布频道不同。如果要基于发布频道加载配置,请使用
Expo.Constants.manifest.releaseChannel

但是,请记住,根据expo的文档,此变量在开发模式下不存在

Expo.Constants.manifest.releaseChannel在开发模式下不存在。但是,当您使用它显式发布/生成时,它确实存在

编辑2:

下面是一个示例,说明如何实现每个发布频道的单独配置,并使用
react native dotenv
避免将机密推送到Git回购(因为这是一个很大的禁忌)

记住:将
.env
文件添加到
.gitignore

常数.js
//eslint禁用下一行导入/无无关依赖项
从'react native dotenv'导入{AWS_KEY};
从“expo”导入{Constants as exposconstants};
const getChannelConfigs=(releaseChannel='')=>{
开关(释放通道){
案例“qa”:
返回{
API_URL:'https://qa.com/api',
...
};
案例“prod”:
返回{
API_URL:'https://prod.com/api/',
...
};
违约:
返回{
API_URL:'https://dev.com/api/',
...
};
}
};
const CHANNEL_CONFIGS=Object.freeze(getChannelConfigs(expoctants.manifest.releaseChannel));
导出默认值{AWS_KEY,CHANNEL_CONFIGS};
环境署署长 在本例中,我们根据应用程序的发布渠道配置应用程序将调用的API URL。我们还避免提交Git回购的密钥,因为我们现在将它们放在一个舒适的
.env
文件中


值得一提的是,在CI中构建独立应用程序时,此设置也会起作用,但是,将密钥交给用户可能不是最好的主意。

问题是,我将在
qa
频道通过
expo-publish发布频道qa
发布时,是否会有NODE_ENV=====
qa
?我将编辑我的答案以更好地回答您的问题,但也许可以修改一下问题,让它变得更清晰。谢谢你的回答。您能否提供一些示例,说明如何以及在何处加载此配置(我使用AWS的密钥),以及如何不将其存储在repo中?我到处都能看到例子,在repo中的env.js文件中有变量。是的,我可以。我在手机上,所以可能在2小时后我会再次更新答案。谢谢。期待
AWS_KEY='superSecretKeyDoNOTStealThx'