NPM Star
Collections
  1. Home
  2. Compare
  3. dotenv vs env-cmd
NPM Compare

Compare NPM packages statistics, trends, and features

CollectionsVS Code extensionChrome extensionTermsPrivacyLinkTreeIndiehackersBig Frontendqiuyumi

Environment Variable Loaders: dotenv vs env-cmd

Both packages help developers manage environment variables in Node.js applications. These tools let you store secret keys, API URLs, and other configuration settings in separate files instead of hardcoding them in your code. While dotenv is simpler and more popular, env-cmd offers additional features like multiple environment files and command execution.

Development Tools - Environment Managementenvironment-variablesconfigurationnodejsdevelopment-toolssecrets-management

Unable to load comparison data. Please try again later.

Similar Packages

envalid

90%

A package that not only loads environment variables but also checks if they're valid. It's like having a security guard that makes sure all your environment variables are correct before your app starts.

Great alternative when you want to be extra safe about your environment variables. It can check if variables are the right type (like numbers or web addresses) and will stop your app if something's wrong.

Environment Variables

env-var

85%

A simple but powerful package for loading and checking environment variables. It helps you get environment variables and convert them to the right type, like numbers or booleans.

Perfect when you want something simpler than envalid but more powerful than dotenv. It's easy to use but still helps prevent mistakes with wrong variable types.

Environment Variables

cross-env

80%

A tool that helps set environment variables that work on both Windows and other operating systems. It's super helpful when you need your Node.js scripts to run the same way on different computers.

While dotenv loads variables from a file, cross-env lets you set them directly in your npm scripts. It's perfect when you need to set different variables for development versus production builds.

Environment Variables

config

70%

A package that helps manage configuration settings across different environments. It can load settings from files, environment variables, and even command line arguments.

More powerful than dotenv when you need to manage lots of settings. It's great for bigger projects where you have different settings for development, testing, and production.

Configuration Management
<div align="center"> πŸŽ‰ announcing <a href="https://github.com/dotenvx/dotenvx">dotenvx</a>. <em>run anywhere, multi-environment, encrypted envs</em>. </div>

Β 

<div align="center">

Special thanks to our sponsors

<a href="https://tuple.app/dotenv"> <div> <img src="https://res.cloudinary.com/dotenv-org/image/upload/w_1000,ar_16:9,c_fill,g_auto,e_sharpen/v1756831704/github_repo_sponsorship_gq4hvx.png" width="600" alt="Tuple"> </div> <b>Tuple, the premier screen sharing app for developers on macOS and Windows.</b> </a> <hr> </div>

dotenv NPM version

<img src="https://raw.githubusercontent.com/motdotla/dotenv/master/dotenv.svg" alt="dotenv" align="right" width="200" />

Dotenv is a zero-dependency module that loads environment variables from a .env file into process.env. Storing configuration in the environment separate from code is based on The Twelve-Factor App methodology.

js-standard-style LICENSE codecov

  • 🌱 Install
  • πŸ—οΈ Usage (.env)
  • 🌴 Multiple Environments πŸ†•
  • πŸš€ Deploying (encryption) πŸ†•
  • πŸ“š Examples
  • πŸ“– Docs
  • ❓ FAQ
  • ⏱️ Changelog

🌱 Install

npm install dotenv --save

You can also use an npm-compatible package manager like yarn, bun or pnpm:

yarn add dotenv
bun add dotenv
pnpm add dotenv

πŸ—οΈ Usage

<a href="https://www.youtube.com/watch?v=YtkZR0NFd1g"> <div align="right"> <img src="https://img.youtube.com/vi/YtkZR0NFd1g/hqdefault.jpg" alt="how to use dotenv video tutorial" align="right" width="330" /> <img src="https://simpleicons.vercel.app/youtube/ff0000" alt="youtube/@dotenvorg" align="right" width="24" /> </div> </a>

Create a .env file in the root of your project (if using a monorepo structure like apps/backend/app.js, put it in the root of the folder where your app.js process runs):

S3_BUCKET="YOURS3BUCKET" SECRET_KEY="YOURSECRETKEYGOESHERE"

As early as possible in your application, import and configure dotenv:

require('dotenv').config() console.log(process.env) // remove this after you've confirmed it is working

.. or using ES6?

import 'dotenv/config'

ES6 import if you need to set config options:

import dotenv from 'dotenv' dotenv.config({ path: '/custom/path/to/.env' })

That's it. process.env now has the keys and values you defined in your .env file:

require('dotenv').config() // or import 'dotenv/config' if you're using ES6 ... s3.getBucketCors({Bucket: process.env.S3_BUCKET}, function(err, data) {})

Multiline values

If you need multiline variables, for example private keys, those are now supported (>= v15.0.0) with line breaks:

PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY----- ... Kh9NV... ... -----END RSA PRIVATE KEY-----"

Alternatively, you can double quote strings and use the \n character:

PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\nKh9NV...\n-----END RSA PRIVATE KEY-----\n"

Comments

Comments may be added to your file on their own line or inline:

# This is a comment SECRET_KEY=YOURSECRETKEYGOESHERE # comment SECRET_HASH="something-with-a-#-hash"

Comments begin where a # exists, so if your value contains a # please wrap it in quotes. This is a breaking change from >= v15.0.0 and on.

Parsing

The engine which parses the contents of your file containing environment variables is available to use. It accepts a String or Buffer and will return an Object with the parsed keys and values.

const dotenv = require('dotenv') const buf = Buffer.from('BASIC=basic') const config = dotenv.parse(buf) // will return an object console.log(typeof config, config) // object { BASIC : 'basic' }

Preload

Note: Consider using dotenvx instead of preloading. I am now doing (and recommending) so.

It serves the same purpose (you do not need to require and load dotenv), adds better debugging, and works with ANY language, framework, or platform. – motdotla

You can use the --require (-r) command line option to preload dotenv. By doing this, you do not need to require and load dotenv in your application code.

$ node -r dotenv/config your_script.js

The configuration options below are supported as command line arguments in the format dotenv_config_<option>=value

$ node -r dotenv/config your_script.js dotenv_config_path=/custom/path/to/.env dotenv_config_debug=true

Additionally, you can use environment variables to set configuration options. Command line arguments will precede these.

$ DOTENV_CONFIG_<OPTION>=value node -r dotenv/config your_script.js
$ DOTENV_CONFIG_ENCODING=latin1 DOTENV_CONFIG_DEBUG=true node -r dotenv/config your_script.js dotenv_config_path=/custom/path/to/.env

Variable Expansion

Use dotenvx to use variable expansion.

Reference and expand variables already on your machine for use in your .env file.

# .env USERNAME="username" DATABASE_URL="postgres://${USERNAME}@localhost/my_database"
// index.js console.log('DATABASE_URL', process.env.DATABASE_URL)
$ dotenvx run --debug -- node index.js [dotenvx@0.14.1] injecting env (2) from .env DATABASE_URL postgres://username@localhost/my_database

Command Substitution

Use dotenvx to use command substitution.

Add the output of a command to one of your variables in your .env file.

# .env DATABASE_URL="postgres://$(whoami)@localhost/my_database"
// index.js console.log('DATABASE_URL', process.env.DATABASE_URL)
$ dotenvx run --debug -- node index.js [dotenvx@0.14.1] injecting env (1) from .env DATABASE_URL postgres://yourusername@localhost/my_database

Syncing

You need to keep .env files in sync between machines, environments, or team members? Use dotenvx to encrypt your .env files and safely include them in source control. This still subscribes to the twelve-factor app rules by generating a decryption key separate from code.

Multiple Environments

Use dotenvx to generate .env.ci, .env.production files, and more.

Deploying

You need to deploy your secrets in a cloud-agnostic manner? Use dotenvx to generate a private decryption key that is set on your production server.

🌴 Manage Multiple Environments

Use dotenvx

Run any environment locally. Create a .env.ENVIRONMENT file and use --env-file to load it. It's straightforward, yet flexible.

$ echo "HELLO=production" > .env.production $ echo "console.log('Hello ' + process.env.HELLO)" > index.js $ dotenvx run --env-file=.env.production -- node index.js Hello production > ^^

or with multiple .env files

$ echo "HELLO=local" > .env.local $ echo "HELLO=World" > .env $ echo "console.log('Hello ' + process.env.HELLO)" > index.js $ dotenvx run --env-file=.env.local --env-file=.env -- node index.js Hello local

more environment examples

πŸš€ Deploying

Use dotenvx.

Add encryption to your .env files with a single command. Pass the --encrypt flag.

$ dotenvx set HELLO Production --encrypt -f .env.production
$ echo "console.log('Hello ' + process.env.HELLO)" > index.js

$ DOTENV_PRIVATE_KEY_PRODUCTION="<.env.production private key>" dotenvx run -- node index.js
[dotenvx] injecting env (2) from .env.production
Hello Production

learn more

πŸ“š Examples

See examples of using dotenv with various frameworks, languages, and configurations.

  • nodejs
  • nodejs (debug on)
  • nodejs (override on)
  • nodejs (processEnv override)
  • esm
  • esm (preload)
  • typescript
  • typescript parse
  • typescript config
  • webpack
  • webpack (plugin)
  • react
  • react (typescript)
  • express
  • nestjs
  • fastify

πŸ“– Documentation

Dotenv exposes four functions:

  • config
  • parse
  • populate

Config

config will read your .env file, parse the contents, assign it to process.env, and return an Object with a parsed key containing the loaded content or an error key if it failed.

const result = dotenv.config() if (result.error) { throw result.error } console.log(result.parsed)

You can additionally, pass options to config.

Options

path

Default: path.resolve(process.cwd(), '.env')

Specify a custom path if your file containing environment variables is located elsewhere.

require('dotenv').config({ path: '/custom/path/to/.env' })

By default, config will look for a file called .env in the current working directory.

Pass in multiple files as an array, and they will be parsed in order and combined with process.env (or option.processEnv, if set). The first value set for a variable will win, unless the options.override flag is set, in which case the last value set will win. If a value already exists in process.env and the options.override flag is NOT set, no changes will be made to that value.

require('dotenv').config({ path: ['.env.local', '.env'] })
quiet

Default: false

Suppress runtime logging message.

// index.js require('dotenv').config({ quiet: false }) // change to true to suppress console.log(`Hello ${process.env.HELLO}`)
# .env .env
$ node index.js [dotenv@17.0.0] injecting env (1) from .env Hello World
encoding

Default: utf8

Specify the encoding of your file containing environment variables.

require('dotenv').config({ encoding: 'latin1' })
debug

Default: false

Turn on logging to help debug why certain keys or values are not being set as you expect.

require('dotenv').config({ debug: process.env.DEBUG })
override

Default: false

Override any environment variables that have already been set on your machine with values from your .env file(s). If multiple files have been provided in option.path the override will also be used as each file is combined with the next. Without override being set, the first value wins. With override set the last value wins.

require('dotenv').config({ override: true })
processEnv

Default: process.env

Specify an object to write your environment variables to. Defaults to process.env environment variables.

const myObject = {} require('dotenv').config({ processEnv: myObject }) console.log(myObject) // values from .env console.log(process.env) // this was not changed or written to

Parse

The engine which parses the contents of your file containing environment variables is available to use. It accepts a String or Buffer and will return an Object with the parsed keys and values.

const dotenv = require('dotenv') const buf = Buffer.from('BASIC=basic') const config = dotenv.parse(buf) // will return an object console.log(typeof config, config) // object { BASIC : 'basic' }

Options

debug

Default: false

Turn on logging to help debug why certain keys or values are not being set as you expect.

const dotenv = require('dotenv') const buf = Buffer.from('hello world') const opt = { debug: true } const config = dotenv.parse(buf, opt) // expect a debug message because the buffer is not in KEY=VAL form

Populate

The engine which populates the contents of your .env file to process.env is available for use. It accepts a target, a source, and options. This is useful for power users who want to supply their own objects.

For example, customizing the source:

const dotenv = require('dotenv') const parsed = { HELLO: 'world' } dotenv.populate(process.env, parsed) console.log(process.env.HELLO) // world

For example, customizing the source AND target:

const dotenv = require('dotenv') const parsed = { HELLO: 'universe' } const target = { HELLO: 'world' } // empty object dotenv.populate(target, parsed, { override: true, debug: true }) console.log(target) // { HELLO: 'universe' }

options

Debug

Default: false

Turn on logging to help debug why certain keys or values are not being populated as you expect.

override

Default: false

Override any environment variables that have already been set.

❓ FAQ

Why is the .env file not loading my environment variables successfully?

Most likely your .env file is not in the correct place. See this stack overflow.

Turn on debug mode and try again..

require('dotenv').config({ debug: true })

You will receive a helpful error outputted to your console.

Should I commit my .env file?

No. We strongly recommend against committing your .env file to version control. It should only include environment-specific values such as database passwords or API keys. Your production database should have a different password than your development database.

Should I have multiple .env files?

We recommend creating one .env file per environment. Use .env for local/development, .env.production for production and so on. This still follows the twelve factor principles as each is attributed individually to its own environment. Avoid custom set ups that work in inheritance somehow (.env.production inherits values form .env for example). It is better to duplicate values if necessary across each .env.environment file.

In a twelve-factor app, env vars are granular controls, each fully orthogonal to other env vars. They are never grouped together as β€œenvironments”, but instead are independently managed for each deploy. This is a model that scales up smoothly as the app naturally expands into more deploys over its lifetime.

– The Twelve-Factor App

What rules does the parsing engine follow?

The parsing engine currently supports the following rules:

  • BASIC=basic becomes {BASIC: 'basic'}
  • empty lines are skipped
  • lines beginning with # are treated as comments
  • # marks the beginning of a comment (unless when the value is wrapped in quotes)
  • empty values become empty strings (EMPTY= becomes {EMPTY: ''})
  • inner quotes are maintained (think JSON) (JSON={"foo": "bar"} becomes {JSON:"{\"foo\": \"bar\"}")
  • whitespace is removed from both ends of unquoted values (see more on trim) (FOO= some value becomes {FOO: 'some value'})
  • single and double quoted values are escaped (SINGLE_QUOTE='quoted' becomes {SINGLE_QUOTE: "quoted"})
  • single and double quoted values maintain whitespace from both ends (FOO=" some value " becomes {FOO: ' some value '})
  • double quoted values expand new lines (MULTILINE="new\nline" becomes
{MULTILINE: 'new
line'}
  • backticks are supported (BACKTICK_KEY=`This has 'single' and "double" quotes inside of it.`)

What happens to environment variables that were already set?

By default, we will never modify any environment variables that have already been set. In particular, if there is a variable in your .env file which collides with one that already exists in your environment, then that variable will be skipped.

If instead, you want to override process.env use the override option.

require('dotenv').config({ override: true })

How come my environment variables are not showing up for React?

Your React code is run in Webpack, where the fs module or even the process global itself are not accessible out-of-the-box. process.env can only be injected through Webpack configuration.

If you are using react-scripts, which is distributed through create-react-app, it has dotenv built in but with a quirk. Preface your environment variables with REACT_APP_. See this stack overflow for more details.

If you are using other frameworks (e.g. Next.js, Gatsby...), you need to consult their documentation for how to inject environment variables into the client.

Can I customize/write plugins for dotenv?

Yes! dotenv.config() returns an object representing the parsed .env file. This gives you everything you need to continue setting values on process.env. For example:

const dotenv = require('dotenv') const variableExpansion = require('dotenv-expand') const myEnv = dotenv.config() variableExpansion(myEnv)

How do I use dotenv with import?

Simply..

// index.mjs (ESM) import 'dotenv/config' // see https://github.com/motdotla/dotenv#how-do-i-use-dotenv-with-import import express from 'express'

A little background..

When you run a module containing an import declaration, the modules it imports are loaded first, then each module body is executed in a depth-first traversal of the dependency graph, avoiding cycles by skipping anything already executed.

– ES6 In Depth: Modules

What does this mean in plain language? It means you would think the following would work but it won't.

errorReporter.mjs:

class Client { constructor (apiKey) { console.log('apiKey', apiKey) this.apiKey = apiKey } } export default new Client(process.env.API_KEY)

index.mjs:

// Note: this is INCORRECT and will not work import * as dotenv from 'dotenv' dotenv.config() import errorReporter from './errorReporter.mjs' // process.env.API_KEY will be blank!

process.env.API_KEY will be blank.

Instead, index.mjs should be written as..

import 'dotenv/config' import errorReporter from './errorReporter.mjs'

Does that make sense? It's a bit unintuitive, but it is how importing of ES6 modules work. Here is a working example of this pitfall.

There are two alternatives to this approach:

  1. Preload with dotenvx: dotenvx run -- node index.js (Note: you do not need to import dotenv with this approach)
  2. Create a separate file that will execute config first as outlined in this comment on #133

Why am I getting the error Module not found: Error: Can't resolve 'crypto|os|path'?

You are using dotenv on the front-end and have not included a polyfill. Webpack < 5 used to include these for you. Do the following:

npm install node-polyfill-webpack-plugin

Configure your webpack.config.js to something like the following.

require('dotenv').config() const path = require('path'); const webpack = require('webpack') const NodePolyfillPlugin = require('node-polyfill-webpack-plugin') module.exports = { mode: 'development', entry: './src/index.ts', output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist'), }, plugins: [ new NodePolyfillPlugin(), new webpack.DefinePlugin({ 'process.env': { HELLO: JSON.stringify(process.env.HELLO) } }), ] };

Alternatively, just use dotenv-webpack which does this and more behind the scenes for you.

What about variable expansion?

Try dotenv-expand

What about syncing and securing .env files?

Use dotenvx to unlock syncing encrypted .env files over git.

What if I accidentally commit my .env file to code?

Remove it, remove git history and then install the git pre-commit hook to prevent this from ever happening again.

brew install dotenvx/brew/dotenvx
dotenvx precommit --install

How can I prevent committing my .env file to a Docker build?

Use the docker prebuild hook.

# Dockerfile ... RUN curl -fsS https://dotenvx.sh/ | sh ... RUN dotenvx prebuild CMD ["dotenvx", "run", "--", "node", "index.js"]

Contributing Guide

See CONTRIBUTING.md

CHANGELOG

See CHANGELOG.md

Who's using dotenv?

These npm modules depend on it.

Projects that expand it often use the keyword "dotenv" on npm.

Linux Tests Windows Tests Coverage Status npm npm License Typescript-ESLint

env-cmd

A simple node program for executing commands using an environment from an env file.

πŸ’Ύ Install

npm install env-cmd or npm install -g env-cmd

⌨️ Basic Usage

Environment file ./.env

# This is a comment ENV1=THANKS ENV2=FOR ALL ENV3=THE FISH

Package.json

{ "scripts": { "test": "env-cmd -- mocha -R spec" } }

Terminal

./node_modules/.bin/env-cmd -- node index.js

Using custom env file path

To use a custom env filename or path, pass the -f flag. This is a major breaking change from prior versions < 9.0.0

Terminal

./node_modules/.bin/env-cmd -f ./custom/path/.env -- node index.js

πŸ“œ Help

Usage: env-cmd [options] -- <command> [...args] Options: -v, --version output the version number -e, --environments [envs...] The rc file environment(s) to use -f, --file [path] Custom env file path or .rc file path if '-e' used (default path: ./.env or ./.env-cmdrc.(js|cjs|mjs|json)) -x, --expand-envs Replace $var and ${var} in args and command with environment variables --recursive Replace $var and ${var} in env file with the referenced environment variable --fallback Fallback to default env file path, if custom env file path not found --no-override Do not override existing environment variables --silent Ignore any env-cmd errors and only fail on executed program failure. --use-shell Execute the command in a new shell with the given environment --verbose Print helpful debugging information -h, --help display help for command

πŸ”¬ Advanced Usage

.rc file usage

For more complex projects, a .env-cmdrc file can be defined in the root directory and supports as many environments as you want. Simply use the -e flag and provide which environments you wish to use from the .env-cmdrc file. Using multiple environment names will merge the environment variables together. Later environments overwrite earlier ones in the list if conflicting environment variables are found.

.rc file ./.env-cmdrc

{ "development": { "ENV1": "Thanks", "ENV2": "For All" }, "test": { "ENV1": "No Thanks", "ENV3": "!" }, "production": { "ENV1": "The Fish" } }

Terminal

./node_modules/.bin/env-cmd -e production -- node index.js # Or for multiple environments (where `production` vars override `test` vars, # but both are included) ./node_modules/.bin/env-cmd -e test,production -- node index.js

--no-override option

Prevents overriding of existing environment variables on process.env and within the current environment.

--fallback file usage option

If the .env file does not exist at the provided custom path, then use the default fallback location ./.env env file instead.

--use-shell

Executes the command within a new shell environment. This is useful if you want to string multiple commands together that share the same environment variables.

Terminal

./node_modules/.bin/env-cmd -f ./test/.env --use-shell -- "npm run lint && npm test"

Asynchronous env file support

EnvCmd supports reading from asynchronous .env files. Instead of using a .env file, pass in a .js file that exports either an object or a Promise resolving to an object ({ ENV_VAR_NAME: value, ... }). Asynchronous .rc files are also supported using .js file extension and resolving to an object with top level environment names ({ production: { ENV_VAR_NAME: value, ... } }).

Terminal

./node_modules/.bin/env-cmd -f ./async-file.js -- node index.js

-x expands vars in arguments

EnvCmd supports expanding $var values passed in as arguments to the command. The allows a user to provide arguments to a command that are based on environment variable values at runtime.

NOTE: You must escape the $ character with \ or your terminal might try to auto expand it before passing it to env-cmd.

Terminal

# $VAR will be expanded into the env value it contains at runtime ./node_modules/.bin/env-cmd -x -- node index.js --arg=\$VAR

or in package.json (use \\ to insert a literal backslash)

{ "script": { "start": "env-cmd -x -- node index.js --arg=\\$VAR" } }

--silent suppresses env-cmd errors

EnvCmd supports the --silent flag the suppresses all errors generated by env-cmd while leaving errors generated by the child process and cli signals still usable. This flag is primarily used to allow env-cmd to run in environments where the .env file might not be present, but still execute the child process without failing due to a missing file.

πŸ’Ώ Examples

You can find examples of how to use the various options above by visiting the examples repo env-cmd-examples.

πŸ’½οΈ Environment File Formats

These are the currently accepted environment file formats. If any other formats are desired please create an issue.

  • .env as key=value
  • .env.json Key/value pairs as JSON
  • .env.js JavaScript file exporting an object or a Promise that resolves to an object
  • .env-cmdrc as valid json or .env-cmdrc.json in execution directory with at least one environment { "dev": { "key1": "val1" } }
  • .env-cmdrc.js JavaScript file exporting an object or a Promise that resolves to an object that contains at least one environment

πŸ—‚ Path Rules

This lib attempts to follow standard bash path rules. The rules are as followed:

Home Directory = /Users/test

Working Directory = /Users/test/Development/app

| Type | Input Path | Expanded Path | | -- | -- | ------------- | | Absolute | /some/absolute/path.env | /some/absolute/path.env | | Home Directory with ~ | ~/starts/on/homedir/path.env | /Users/test/starts/on/homedir/path.env | | Relative | ./some/relative/path.env or some/relative/path.env | /Users/test/Development/app/some/relative/path.env | | Relative with parent dir | ../some/relative/path.env | /Users/test/Development/some/relative/path.env |

πŸ›  API Usage

EnvCmd

A function that executes a given command in a new child process with the given environment and options

  • options { object }
    • command { string }: The command to execute (node, mocha, ...)
    • commandArgs { string[] }: List of arguments to pass to the command (['-R', 'Spec'])
    • envFile { object }
      • filePath { string }: Custom path to .env file to read from (defaults to: ./.env)
      • fallback { boolean }: Should fall back to default ./.env file if custom path does not exist
    • rc { object }
      • environments { string[] }: List of environment to read from the .rc file
      • filePath { string }: Custom path to the .rc file (defaults to: ./.env-cmdrc(|.js|.json))
    • options { object }
      • expandEnvs { boolean }: Expand $var values passed to commandArgs (default: false)
      • noOverride { boolean }: Prevent .env file vars from overriding existing process.env vars (default: false)
      • silent { boolean }: Ignore any errors thrown by env-cmd, used to ignore missing file errors (default: false)
      • useShell { boolean }: Runs command inside a new shell instance (default: false)
      • verbose { boolean }: Prints extra debug logs to console.info (default: false)
    • Returns { Promise<object> }: key is env var name and value is the env var value

GetEnvVars

A function that parses environment variables from a .env or a .rc file

  • options { object }
    • envFile { object }
      • filePath { string }: Custom path to .env file to read from (defaults to: ./.env)
      • fallback { boolean }: Should fall back to default ./.env file if custom path does not exist
    • rc { object }
      • environments { string[] }: List of environment to read from the .rc file
      • filePath { string }: Custom path to the .rc file (defaults to: ./.env-cmdrc(|.js|.json))
    • verbose { boolean }: Prints extra debug logs to console.info (default: false)
  • Returns { Promise<object> }: key is env var name and value is the env var value

πŸ§™ Why

Because sometimes it is just too cumbersome passing a lot of environment variables to scripts. It is usually just easier to have a file with all the vars in them, especially for development and testing.

🚨Do not commit sensitive environment data to a public git repo! 🚨

🧬 Related Projects

cross-env - Cross platform setting of environment scripts

πŸ“‹ Contributing Guide

I welcome all pull requests. Please make sure you add appropriate test cases for any features added. Before opening a PR please make sure to run the following scripts:

  • npm run lint checks for code errors and format according to ts-standard
  • npm test make sure all tests pass
  • npm run test-cover make sure the coverage has not decreased from current master

Dependencies Comparison

dotenv

Dependencies

Dev Dependencies

@types/node^18.11.3
decache^4.6.2
sinon^14.0.1
standard^17.0.0
standard-version^9.5.0
tap^19.2.0
typescript^4.8.4

Peer Dependencies

env-cmd

Dependencies

@commander-js/extra-typings^13.1.0
commander^13.1.0
cross-spawn^7.0.6

Dev Dependencies

@commitlint/cli^19.6.0
@commitlint/config-conventional^19.6.0
@eslint/js^9.16.0
@types/chai^5.0.1
@types/cross-spawn^6.0.6
@types/mocha^10.0.10
@types/node^24.0.10
@types/sinon^17.0.3
c8^10.1.2
chai^5.1.2
coveralls^3.0.0
esmock^2.6.9
globals^16.0.0
husky^9.1.7
mocha^11.0.0
sinon^21.0.0
tsx^4.19.2
typescript^5.7.2
typescript-eslint^8.15.0

Peer Dependencies

Who's Using These Packages

dotenv

OverVue
OverVue

Prototyping Tool For Vue Devs ι€‚η”¨δΊŽVueηš„εŽŸεž‹ε·₯ε…·

bati
bati

πŸ”¨ Next-gen scaffolder. Get started with fully-functional apps, and choose any tool you want.

env-cmd

sonarqube-webapp
sonarqube-webapp

SonarQube Community Build Web App