env-stage-loader
Version:
Loads `.env` files in order based on `process.env.NODE_ENV` value with [stage].local support
121 lines (85 loc) • 2.55 kB
Markdown
Loads `.env` files in order based on `process.env.NODE_ENV` value.
1. shell
2. .env.{environment}.local
3. .env.{environment}
4. .env.local
5. .env
If environment variable is set, any file loaded after will not override it.
Import and use asap in your build process or app
```js
const loadStageEnv = require('env-stage-loader')
// Load env variables
const values = loadStageEnv()
console.log('resolved values', values)
// Debug load order & value setting
loadStageEnv({ debug: true })
// Set env dynamically
loadStageEnv({
env: 'development'
})
// Force override of any env variable
loadStageEnv({
forceSet: {
FOO: 'this value will win'
}
})
// Force override of any env variable
loadStageEnv({
env: 'development'
// Force unsetting of all previously found ENV vars found in shell
unloadEnv: true
})
```
**[stage].local takes presidence**
```js
/*
.env.dev.local contains FOO=BAR
.env.dev contains FOO=ZAZ
*/
const values = loadStageEnv({ env: 'dev' })
console.log(values.FOO === process.env.FOO)
console.log(process.env.FOO)
// value "BAR" from .env.dev.local
```
**shell takes presidence**
```js
/*
process.env.XYZ === '123'
.env.dev.local contains XYZ=345
.env.dev contains XYZ=987
*/
const values = loadStageEnv({ env: 'dev' })
console.log(process.env.XYZ)
// value "123" from original shell process
```
Another shell example
```bash
export FOO=1
```
FOO is set in shell session...
```js
/*
.env file contains FOO=ZAZ
*/
const values = loadStageEnv({ env: 'dev' })
console.log(process.env.FOO)
// process.env.FOO === "1" because shell takes precedence
```
Run `tests` for more examples.
- `.env`: Default.
- `.env.local`: Local overrides. **This file is loaded for all environments except test.**
- `.env.development`, `.env.test`, `.env.production`: Environment-specific settings.
- `.env.development.local`, `.env.test.local`, `.env.production.local`: Local overrides of environment-specific settings.
Files on the left have more priority than files on the right:
- `npm start`: `.env.development.local`, `.env.local`, `.env.development`, `.env`
These variables will act as the defaults if the machine does not explicitly set them.
Please refer to the [dotenv documentation](https://github.com/motdotla/dotenv) for more details.
- [dotenv-flow](https://github.com/kerimdzhanov/dotenv-flow)
- https://www.npmjs.com/package/universal-dotenv
- https://github.com/thenativeweb/nodeenv