React native 如何在react native(expo)中安全保管我的钥匙?
我有3个发布渠道-开发、质量保证和产品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 ||
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'