I am developing app with "react-native" and "react-native-config package". I have installed "react-native-config" according to the manual. (https://www.npmjs.com/package/react-native-config?activeTab=readme)
- for android - edit "root/android/app/build.gradle"
apply from: project(':react-native-config').projectDir.getPath() + "/dotenv.gradle"
project.ext.envConfigFiles = [
debug: ".env.dev",
release: "env.prod",
anothercustombuild: ".env",
]
- for ios - create 2 scheme (dev / prod) and "Config.xcconfig"
for pord scheme run script
cp "${PROJECT_DIR}/../.env.prod" "${PROJECT_DIR}/../.env"
"${SRCROOT}/../node_modules/react-native-config/ios/ReactNativeConfig/BuildXCConfig.rb" "${SRCROOT}/.." "${SRCROOT}/tmp.xcconfig"
for dev scheme run script
cp "${PROJECT_DIR}/../.env.dev" "${PROJECT_DIR}/../.env"
"${SRCROOT}/../node_modules/react-native-config/ios/ReactNativeConfig/BuildXCConfig.rb" "${SRCROOT}/.." "${SRCROOT}/tmp.xcconfig"
- I created 3 files in the root directory. (".env" / ".env.dev" / ".env.prod")
I started my app by using "npx react-native run-ios(run-android)". I'm able to use env variables from the .env file in both iOS and Android
Here are my questions.
How can I use env variables in ".env.dev" and ".env.prod"? When I print the value using console.log(Config.API_KEY);, the console always shows me the value from the ".env" file (both on iOS and Android).
There are articles that tell me to add the code below to "build.gradle" when I search for it. What role does this code play?
resValue
namespace 'com.myApp'
defaultConfig {
...
resValue 'string', 'build_config_package','com.myApp' << add
}
flavor
flavorDimensions "version"
productFlavors {
develop {
}
stage {
}
product {
}
}
- How can I reload value of .env files? Even if I modify env variables and re-build and run the app, the previous value is always output. I have tried
$ rm -rf node_modules/.cache/babel-loader/\*
$ npm cache clean --force
$ npm start -- --reset-cache
The only way I was able to reload the env variables was to remove the node-module and install it again as below.
$ npm cache clean --force
$ rm -rf node_modules package-lock.json
$ npm install
- By doing this setup, it seems like I can do separate dev and prod builds, but my knowledge is lacking, and I'm having trouble grasping it even after Googling. Could you explain this a bit, please?
I'm very new to React Native development. If anyone has solutions, I'd greatly appreciate detailed explanations.
Thank you guys.
env is always taken from the .env file which is located inside the root. to switch b/w env file you can use custom command.
in package.json add this command :
"switch": "rimraf .env && sh -c 'cp .env.${0} .env'"
,Run this command once before npm start,
npm run switch dev