In this post we will look into the steps to configure multiple environments with nodejs. This is important because you would
want to test your application as per the configuration of corresponding environments such as dev, test or prod.
Introduction
The configuration of multiple environments with nodejs is pretty straightforward. We are going to use a library called
dotenv
. For our demo we are going to use npm
to install packages and run our application.
You can find the details of the dotenv
package from the link below.
https://www.npmjs.com/package/dotenv
Understanding how the environment variables are stored
The environment variables are stored in a file named .env
. Since this file would contain the URLS and other sensitive data
for your environment it is not committed into the repo. Typically you would find that this file is added in the .gitignore
file to avoid it to be committed.
# dotenv environment variable files
.env
.env.development.local
.env.test.local
.env.production.local
.env.local
You can see the naming convention of the environment files. It starts with .env
followed by your environment name.
Loading the configuration with dotenv
A typical nodejs application has a server.js
file that spins up your server listening to the incoming requests.
const http = require('http')
const app = require('./app')
const port = process.env.PORT || 3000
const server = http.createServer(app)
require('dotenv').config()
server.listen(port,() => console.log(`Server listening on ${process.env.BASE_URL}`))
The line require('dotenv').config()
makes aware of all the existing .env
files in the application and loads it into
process.env
.
Running the application specific to an environment
As seen above we have specified all the different environment files and also our server is aware of the different configurations present in the application.
It is now time to run the application with a specific environment such that the settings pertaining to that environment is
loaded into the process.env
which will be used to provide the settings to the application.
In order to run the application we need to add different scripts
in our package.json
file so that the configuration
is provided to the process.env
when the application is running.
The below example shows the way to specify scripts specific to environment.
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "nodemon -r dotenv/config src/server.js",
"dev": "nodemon -r dotenv/config src/server.js dotenv_config_path=env/.env.dev",
"prod": "nodemon -r dotenv/config src/server.js dotenv_config_path=env/.env.prod",
"local": "nodemon -r dotenv/config src/server.js dotenv_config_path=env/.env.local"
},
When we run the application with the specific script in the command the environment specific settings is applied to the application.
Run the app in dev mode - npm run dev
Run the app in prod mode - npm run prod
Run the app in local mode - npm run local
Conclusion
In this post we used dotenv
package to configure multiple environments for our application. We understood -
- How the environment variables are stored for an app
- Loading the configuration with dotenv
- Running the app specific to an environment
This is all about configuring your nodejs application for multiple environments.
Thank you for reading and see you in the next post.
Implementing Api rate limiting using redis and nodejs
Building a CAPTCHA API with Nodejs