Setting up multiple environments in React Native in a cross-platform way so that it works on Windows, macOS and Linux. Then make the environment variable available for use in JavaScript, iOS and Android code
1npm install --save-dev cross-env
2npm install react-native-config
The following is involved
cross-env
.env.staging
) by setting ENVFILE
1cross-env ENVFILE=.env.staging && react-native run-ios
1# .env.staging
2API_URL=https://myapi.com
3GOOGLE_MAPS_API_KEY=abcdefgh
1import Config from 'react-native-config'
2
3Config.API_URL // 'https://myapi.com'
4Config.GOOGLE_MAPS_API_KEY // 'abcdefgh'
Additionally, you should also set NODE_ENV
to be able to use it in places like babel.config.js
to be able to configure plugins (e.g. remove all console.log
statements from production environment) Setting process.env.NODE_ENV
inside the code is not recommended
The final command that sets NODE_ENV
, ENVFILE
and runs the project would become
1cross-env NODE_ENV=staging ENVFILE=.env.staging && react-native run-ios
Environment variables are configured using react-native-config
For multiple environments, you have to create different .env
files and load them by configuring ENVFILE
when running commands
1ENVFILE=.env.staging && react-native run-ios
The files that store the variables are .env
, .env.staging
and .env.production
. If you don’t specify a file, react-native-config
will read from .env
by default
The syntax for setting environment variables is different fro Bash, Windows and PowerShell, which makes it hard to save as an npm
script for everyone’s use
1ENVFILE=.env.staging react-native run-ios # bash
2SET ENVFILE=.env.staging && react-native run-ios # windows
3env:ENVFILE=".env.staging"; react-native run-ios # powershell
That’s where cross-env
comes in. A cross-platform command with cross-env
would be
1cross-env NODE_ENV=production ENVFILE=.env.production react-native run-ios # bash, windows, powershell
Similarly, the following different commands
1export NODE_ENV=production # bash
2SET NODE_ENV=production # windows
3$env:NODE_ENV="production"; # powershell
can be set in a cross-platform way using cross-env
like so
1cross-env NODE_ENV=production # bash, windows, powershell