Handle Multiple Environments in React

When working on a react project generally we need to store some information about the specific environment that we are working with. For example, we may have a separate BASE_URL for development, test, and production servers.

But it is not practical to change the endpoint manually inside the code every time when we need to deploy the app for a separate environment. It may create a disaster if anyone forgets to change the endpoint for production and our production app is deployed with the development endpoint.

What’s the solution?

We have to maintain separate variables for separate environments. In ReactJS, we can access a default environment variable named NODE_ENV.

when we run the following command the default value of NODE_ENV is …

npm start      // NODE_ENV =  development
npm run build  // NODE_ENV =  production
npm run test   // NODE_ENV =  test

we can access these variables from anywhere inside our project using process.env.NODE_ENV at runtime and decide which variable to access.

So for our scenario, one solution may look like this …

This is a possible solution but it is not scalable. What if we have hundreds of configuration variables then those values will be scattered throughout the whole project and it will become a mess in a very short time.

Let’s improve this

React has provided a neat way of handling this scenario. We want that all of our environment variables will be stored in a single place. To do that we need to create a file named .env inside our root folder.

In that file, we will put all of our environment variables. But we need to be careful about the naming.

All Variables should start with the prefix REACTAPP

So for our base URL, we can write

REACT_APP_BASE_URL = “MY_BASE_URL_FOR_PRODUCTION”

Then we can access the value of this URL throughout our app by simple

Elegant right?

We can add as much value as we want.

Okay but what about our other environments? For that, we will create another file named .env.development and put our development variables there. Inside .env.development file

REACT_APP_BASE_URL = “MY_BASE_URL_FOR_DEVELOPMENT”

Similarly, we can create another file for testing by creating another file named .env.test

Now we are ready. Notice one thing we didn’t create any file named .env.production because by default react chooses the .env file if it doesn’t find any file with the appropriate suffix. So as a convention, the .env file is used for a production build. But sure you can create a .env.production file and it will work just fine.

Now when you run the command npm start the base URL will be the one that you gave in the .env.development file and while building for the production it will be your production URL.

Need even more environments?

That’s easy now. If you need another environment. For example staging. Then **in your start script, you have to specify the NODE_ENV variable like this …

"start:staging": "NODE_ENV=staging react-scripts start",

and create a corresponding .env.staging file to put your environment variables there. and when you run

npm start:staging

The values will be read from the .env.staging file now.

Conclusion

So that’s how we can handle multiple environments in React applications.

Have a nice day! :D

Get in touch with me via LinkedIn


Share this post


Read more articles...

team

Continuous Deployment Pipeline for React Apps

team

Implement multi-language Support in React

team

Multiple Environment in NodeJS Application

team

Implement multi-language Support in React

team

Error handling in a NodeJS application

Profile Image

Who I am

Hi, I amMohammad Faisal, A full-stack software engineer @Cruise , working remotely from a small but beautiful country named Bangladesh.

I am most experienced inReactJS,NodeJS andAWS

Buy Me a Coffee Widget