Custom env is a library built to make development more feasible by allowing multiple .env configurations for different environments.
npm install custom-envprocess.env object.
npm install custom-env
javascript // Default configuration
import { env } from "custom-env";
env();
`
CommonJS Require
`javascript // Default configuration
require("custom-env").env();
`
Create a .env file in your app's root directory and add the environment variables each on new line:
`env
APP_ENV=dev
DB_HOST=localhost
DB_USER=root
DB_PASS=root
`
Simple! The process.env is now loaded with the environment variables above.
$3
`javascript
console.log(process.env.APP_ENV);
console.log(process.env.DB_HOST);
console.log(process.env.DB_USER);
console.log(process.env.DB_PASS);
`
$3
`
dev
localhost
root
root
`
If you want to load from a particular environment, use:
ESM Import
`javascript
// This loads configuration from staging environment
import { env } from "custom-env";
env("staging");
`
CommonJS Require
`javascript
// This loads configuration from staging environment
require("custom-env").env("staging");
`
Create a .env.staging file in your app's root directory and add the environment variables each on new line:
`env
APP_ENV=staging
DB_HOST=localhost
DB_USER=root
DB_PASS=root
`
The process.env is now loaded with the environment variables above.
This completely overrides process.env.NODE_ENV
Try it out:
`
NODE_ENV=staging node index.js
`
$3
`javascript
console.log(process.env.APP_ENV);
console.log(process.env.DB_HOST);
console.log(process.env.DB_USER);
console.log(process.env.DB_PASS);
`
$3
`
staging
localhost
root
root
`
Loading from the current environment
You can load configuration from the current environment with custom-env by passing the first argument of the env() method as true (note: not required in version 2+) and that's all:
ESM Import
`javascript // Default configuration
// This Loads the configuration dynamically from to the current enviroment
// Defaults to _dev_ if the environment was set
import { env } from "custom-env";
env("custom-env").env(true);
`
CommonJS Require
`javascript
// This Loads the configuration dynamically from to the current enviroment
// Defaults to _dev_ if the environment was set
require("custom-env").env(true);
`
The
env() method
The env() method holds three (3) optional arguments.
- 1 envname - Specifies the development name, defaults to dev or development,
- 2 path - Specifies the directory to find configuration files, defaults to _current working directory_.
- 3 defaultEnvFallback - Specifies whether to fallback to .env configuration if the specified _envname_ is not found, defaults to true.
ESM Import
`javascript
import { env } from "custom-env";
env("dev", "path/to/custom/path");
`
CommonJS Require
`javascript
require("custom-env").env("dev", "path/to/custom/path");
`
TypeScript Usage
The library comes with a type declaration file
If you want auto complete for your .env variables
Use dotenv-types-generator it will generate a .env.d.ts file containing all your variables
Usage:
`
npx dotenv-types-generator
`
dotenv-expand
You can also leverage the dotenv-expand extension to use ENV variable expansion inside your .env files.
For example:
`
IP=127.0.0.1
PORT=1234
APP_URL=http://${IP}:${PORT}
`
Using the above example .env file, process.env.APP_URL would be http://127.0.0.1:1234.
$3
We strongly recommend that you should not commit and pass .env.production file in production mode, as this file may contain sensitive information.
Sponsor and Support
Sponsoring and Supporting custom-env keeps the work going and improvements steady. Buy me a coffe: https://www.buymeacoffee.com/olasheni Thanks in advance!
Change Log
$3
#### Changed
- Minor edits on FUNDING.yml
$3
#### Changed
- Reverts dotenv-expand version
$3
#### Changed
- Create README.md file
$3
#### Changed
- Create FUNDING.yml file
- Updates dotenv-expand
$3
#### Changed
- Custom env now supports TypeScript, see this for more info.
- You can now load configuration from the current environment by default without passing any argument to env() method
$3
#### Fixed
- Bug #11 Inconsistency in envname loading fixed.
- Bug #9 Default env config fall back fixed.
#### Changed
- You can now load configuration from the current environment by default without passing any argument to env()` method