dotenv-local

dotenv-local is a utility library for loading environment variables with a specific order of priority, ideal for managing configurations in different environments such as development, production, and testing.

Installation

npm install dotenv-local
# or
yarn add dotenv-local

Usage

Define the LoadEnvOpts type

export type LoadEnvOpts = {
  envDir?: string;
  mode?: "development" | "production" | "testing" | "staging" | string;
  envPrefix?: string | string[];
  envInitial?: Record<string, string>;
  removeEnvPrefix?: boolean;
  encoding?: string;
};

Import the library

import { loadEnv, LoadEnvOpts } from "dotenv-local";

Define the options

const opts: LoadEnvOpts = {
  envDir: "/path/to/env/files",
  mode: "production",
  envPrefix: ["APP_"],
  envInitial: {
    DEFAULT_VAR: "default_value",
  },
  removeEnvPrefix: false,
  encoding: "utf-8",
};

Use the library

const envVariables = loadEnv(opts);
console.log(envVariables);

Options

Default options

const {
  mode = process.env.NODE_ENV || "production",
  envDir = process.cwd(),
  envPrefix = "APP_",
  envInitial = {},
  removeEnvPrefix = false,
  encoding = "utf-8",
} = opts;

Prioritizing File Loading with getEnvFilesForMode

The library determines the order of environment file loading based on the provided mode (e.g., mode = development).

[".env", ".env.local", ".env.development", ".env.development.local"];

This array represents the priority order in which environment files will be loaded. Files with later positions in the array will override those defined earlier.

Examples

Basic Usage

import { loadEnv } from "dotenv-local";
const envVariables = loadEnv();
console.log(envVariables);

Custom Options

import { loadEnv } from "dotenv-local";
const customOptions = {
  envDir: "/path/to/custom/env/files",
  mode: "staging",
  envPrefix: ["API_", "MONGO_"],
  envInitial: {
    INITIAL_VAR: "initial_value",
  },
  removeEnvPrefix: true,
  encoding: "utf-16",
};
const envVariables = loadEnv(customOptions);
console.log(envVariables);

License

This project is licensed under the MIT License - see the LICENSE file for details.