Parse ENV File

Parse .env file format (KEY=value) into an object. Handles comments, quoted values, and empty lines.

Code

Utilities
const result = {};
content.split('\n').forEach(line => {
  line = line.trim();
  if (!line || line.startsWith('#')) return;
  const idx = line.indexOf('=');
  if (idx === -1) return;
  const key = line.slice(0, idx).trim();
  let value = line.slice(idx + 1).trim();
  // Remove surrounding quotes
  if ((value.startsWith('"') && value.endsWith('"')) ||
      (value.startsWith("'") && value.endsWith("'"))) {
    value = value.slice(1, -1);
  }
  result[key] = value;
});
return result;

Parameters

ENV file content.

Browser·fetch() may be limited by CORS

.env File Format

# Database configuration
DB_HOST=localhost
DB_PORT=5432
DB_NAME=myapp

# API keys (use quotes for special characters)
API_KEY="sk_live_abc123"
SECRET='contains spaces and $pecial chars'

# Empty value
EMPTY_VAR=

What This Parser Handles

FeatureExampleResult
Basic assignmentFOO=bar{FOO: "bar"}
Comments# commentIgnored
Empty lines(blank)Ignored
Double quotesKEY="value"{KEY: "value"}
Single quotesKEY='value'{KEY: "value"}
Empty valuesKEY={KEY: ""}
Spaces around =KEY = value{KEY: "value"}

What This Doesn't Handle

For full dotenv compatibility, you'd also need:

# Multiline values (requires special handling)
PRIVATE_KEY="-----BEGIN RSA-----
...
-----END RSA-----"

# Variable expansion
BASE_URL=https://api.example.com
FULL_URL=${BASE_URL}/v1

# Export prefix (shell syntax)
export FOO=bar

Security Best Practices

Never commit .env files

# .gitignore
.env
.env.local
.env.*.local

Use .env.example for documentation

# .env.example (commit this)
DB_HOST=
DB_PORT=5432
API_KEY=your_key_here

Validate required variables

const required = ['DB_HOST', 'API_KEY'];
for (const key of required) {
  if (!env[key]) throw new Error(`Missing ${key}`);
}

Production Libraries

For robust .env handling:

  • dotenv — Node.js standard, loads into process.env
  • dotenv-expand — Adds variable expansion support
  • envalid — Validation and type coercion

This snippet is great for understanding the format or quick parsing in browsers/scripts where libraries aren't available.


More JavaScript Snippets