Bird
Raised Fist0
Node.jsframework~10 mins

dotenv for environment configuration in Node.js - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Concept Flow - dotenv for environment configuration
Start Node.js app
Load dotenv package
Read .env file
Parse key=value pairs
Set process.env variables
App uses process.env variables
App runs with config values
The app starts, dotenv reads the .env file, sets environment variables, then the app uses those variables.
Execution Sample
Node.js
import dotenv from 'dotenv';
dotenv.config();
console.log(process.env.API_KEY);
Loads .env file and prints the API_KEY environment variable.
Execution Table
StepActionInput/StateOutput/State Change
1Start appNo env vars loadedApp begins execution
2Import dotenvdotenv module availableReady to use dotenv
3Call dotenv.config().env file present with API_KEY=12345process.env.API_KEY set to '12345'
4Access process.env.API_KEYprocess.env.API_KEY='12345'Console logs '12345'
5App continuesEnv vars setApp uses env vars as needed
6EndNo more codeExecution stops
💡 App finishes running after environment variables are loaded and used.
Variable Tracker
VariableStartAfter dotenv.config()After console.log()
process.env.API_KEYundefined'12345''12345'
Key Moments - 3 Insights
Why is process.env.API_KEY undefined before calling dotenv.config()?
Because dotenv.config() reads the .env file and sets the variables. Before that, process.env does not have those keys (see execution_table step 3).
What happens if the .env file is missing?
dotenv.config() will not set any new variables, so process.env.API_KEY remains undefined (no change in variable_tracker).
Can we access environment variables directly without dotenv?
Yes, if the variables are set in the system environment. dotenv helps load them from a file during development (see concept_flow).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the value of process.env.API_KEY right after step 2?
Aundefined
B'12345'
Cnull
DError
💡 Hint
Check the 'Output/State Change' column at step 2 in execution_table.
At which step does dotenv set the environment variables from the .env file?
AStep 4
BStep 1
CStep 3
DStep 5
💡 Hint
Look for when dotenv.config() is called in execution_table.
If the .env file had API_KEY=abcde instead of 12345, what would console.log output at step 4?
A'12345'
B'abcde'
Cundefined
DError
💡 Hint
Refer to variable_tracker and how dotenv.config() sets process.env.API_KEY.
Concept Snapshot
dotenv loads environment variables from a .env file into process.env.
Use import dotenv from 'dotenv'; then call dotenv.config() at app start.
Access variables via process.env.VAR_NAME.
If .env is missing, variables stay undefined.
Useful for config without hardcoding secrets.
Full Transcript
This visual trace shows how the dotenv package works in a Node.js app. First, the app starts with no environment variables loaded from .env. Then, dotenv is imported and its config() function is called. This reads the .env file, parses key=value pairs, and sets them on process.env. After this, accessing process.env.API_KEY returns the value from .env, such as '12345'. The app can then use these variables safely. If the .env file is missing, no variables are set. This method helps keep configuration separate from code.

Practice

(1/5)
1. What is the main purpose of using dotenv in a Node.js project?
easy
A. To manage database connections automatically
B. To compile JavaScript code faster
C. To load environment variables from a file into process.env
D. To create HTTP servers easily

Solution

  1. Step 1: Understand what dotenv does

    dotenv reads a file (usually .env) and loads variables into process.env.
  2. Step 2: Identify the main purpose

    This allows your app to access secret or environment-specific settings safely without hardcoding them.
  3. Final Answer:

    To load environment variables from a file into process.env -> Option C
  4. Quick Check:

    dotenv loads env vars = C [OK]
Hint: dotenv loads .env variables into process.env [OK]
Common Mistakes:
  • Thinking dotenv compiles or runs code
  • Confusing dotenv with database or server tools
  • Expecting dotenv to manage app logic
2. Which of the following is the correct way to load environment variables using dotenv in a Node.js file?
easy
A. require('dotenv').config()
B. import dotenv from 'dotenv'; dotenv.load()
C. dotenv.setup()
D. require('dotenv').loadEnv()

Solution

  1. Step 1: Recall the dotenv usage syntax

    The official and common way to load variables is calling require('dotenv').config() at the start of your app.
  2. Step 2: Check other options for correctness

    The other options use incorrect method names or syntax not supported by dotenv.
  3. Final Answer:

    require('dotenv').config() -> Option A
  4. Quick Check:

    Use config() method to load dotenv [OK]
Hint: Use require('dotenv').config() to load env vars [OK]
Common Mistakes:
  • Using wrong method names like load or setup
  • Forgetting to call config() function
  • Trying to import dotenv without config call
3. Given the following code and .env file, what will be the output?

// .env file content
API_KEY=12345
PORT=8080


require('dotenv').config();
console.log(process.env.API_KEY);
console.log(process.env.PORT);
medium
A. undefined\nundefined
B. null\nnull
C. API_KEY\nPORT
D. 12345\n8080

Solution

  1. Step 1: dotenv loads variables from .env into process.env

    After calling require('dotenv').config(), process.env.API_KEY is set to "12345" and process.env.PORT is set to "8080" as strings.
  2. Step 2: console.log prints the values

    The console will output the values exactly as strings, separated by new lines.
  3. Final Answer:

    12345 8080 -> Option D
  4. Quick Check:

    dotenv loads vars as strings = 12345\n8080 [OK]
Hint: dotenv sets process.env vars as strings from .env [OK]
Common Mistakes:
  • Expecting numbers instead of strings
  • Not calling config() before accessing vars
  • Assuming variables are undefined without loading dotenv
4. What is the error in the following code snippet that prevents environment variables from loading correctly?

const dotenv = require('dotenv');
dotenv.config;
console.log(process.env.SECRET_KEY);
medium
A. Missing parentheses after config function call
B. dotenv package not installed
C. SECRET_KEY not defined in .env file
D. Using require instead of import

Solution

  1. Step 1: Check how dotenv.config is called

    The code uses dotenv.config; without parentheses, so the function is not executed.
  2. Step 2: Understand the effect of missing parentheses

    Without calling config(), environment variables are not loaded into process.env, so SECRET_KEY remains undefined.
  3. Final Answer:

    Missing parentheses after config function call -> Option A
  4. Quick Check:

    Call config() with () to load env vars [OK]
Hint: Always call config() with parentheses to load env [OK]
Common Mistakes:
  • Forgetting parentheses on config function
  • Assuming require auto-executes config
  • Ignoring missing .env file or variable
5. You want to use dotenv to load different environment variables for development and production. Your .env file has NODE_ENV=development and API_URL=http://localhost:3000. You also have a .env.production file with NODE_ENV=production and API_URL=https://api.example.com. How can you load the correct file based on the environment?
hard
A. Use dotenv.loadEnv(process.env.NODE_ENV) to auto-load
B. Call require('dotenv').config({ path: `.env.${process.env.NODE_ENV}` }) after setting NODE_ENV
C. Rename .env.production to .env manually before running
D. Call require('dotenv').config() only once without options

Solution

  1. Step 1: Understand dotenv supports custom paths

    dotenv's config function accepts a path option to specify which file to load.
  2. Step 2: Use NODE_ENV to select the file dynamically

    By calling require('dotenv').config({ path: `.env.${process.env.NODE_ENV}` }), you load .env.development or .env.production based on the environment.
  3. Final Answer:

    Call require('dotenv').config({ path: `.env.${process.env.NODE_ENV}` }) after setting NODE_ENV -> Option B
  4. Quick Check:

    Use config({ path }) to load env files by environment [OK]
Hint: Use config({ path: `.env.${NODE_ENV}` }) to load env files [OK]
Common Mistakes:
  • Not specifying path option for different env files
  • Manually renaming files instead of dynamic loading
  • Using nonexistent dotenv.loadEnv method