You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
150 lines
4.1 KiB
150 lines
4.1 KiB
3 years ago
|
<p align="center">
|
||
|
<strong>Announcement 📣</strong><br/>From the makers that brought you Dotenv, introducing <a href="https://sync.dotenv.org">Dotenv Sync</a>.<br/>Sync your .env files between machines, environments, and team members.<br/><a href="https://sync.dotenv.org">Join the early access list.💛</a>
|
||
|
</p>
|
||
|
|
||
|
# dotenv-expand
|
||
|
|
||
|
<img src="https://raw.githubusercontent.com/motdotla/dotenv-expand/master/dotenv-expand.png" alt="dotenv-expand" align="right" />
|
||
|
|
||
|
Dotenv-expand adds variable expansion on top of
|
||
|
[dotenv](http://github.com/motdotla/dotenv). If you find yourself needing to
|
||
|
expand environment variables already existing on your machine, then
|
||
|
dotenv-expand is your tool.
|
||
|
|
||
|
[](https://travis-ci.org/motdotla/dotenv-expand)
|
||
|
[](https://www.npmjs.com/package/dotenv-expand)
|
||
|
[](https://github.com/feross/standard)
|
||
|
|
||
|
## Install
|
||
|
|
||
|
```bash
|
||
|
# Install locally (recommended)
|
||
|
npm install dotenv-expand --save
|
||
|
```
|
||
|
|
||
|
Or installing with yarn? `yarn add dotenv-expand`
|
||
|
|
||
|
## Usage
|
||
|
|
||
|
Create a `.env` file in the root of your project:
|
||
|
|
||
|
```dosini
|
||
|
PASSWORD="s1mpl3"
|
||
|
DB_PASS=$PASSWORD
|
||
|
|
||
|
```
|
||
|
|
||
|
As early as possible in your application, import and configure dotenv and then expand dotenv:
|
||
|
|
||
|
```javascript
|
||
|
var dotenv = require('dotenv')
|
||
|
var dotenvExpand = require('dotenv-expand')
|
||
|
|
||
|
var myEnv = dotenv.config()
|
||
|
dotenvExpand.expand(myEnv)
|
||
|
|
||
|
console.log(process.env)
|
||
|
```
|
||
|
|
||
|
That's it. `process.env` now has the expanded keys and values you defined in your `.env` file.
|
||
|
|
||
|
### Preload
|
||
|
|
||
|
You can use the `--require` (`-r`) [command line option](https://nodejs.org/api/cli.html#cli_r_require_module) to preload dotenv & dotenv-
|
||
|
. By doing this, you do not need to require and load dotenv or dotenv-expand in your application code. This is the preferred approach when using `import` instead of `require`.
|
||
|
|
||
|
```bash
|
||
|
$ node -r dotenv-expand/config your_script.js
|
||
|
```
|
||
|
|
||
|
The configuration options below are supported as command line arguments in the format `dotenv_config_<option>=value`
|
||
|
|
||
|
```bash
|
||
|
$ node -r dotenv-expand/config your_script.js dotenv_config_path=/custom/path/to/your/env/vars
|
||
|
```
|
||
|
|
||
|
Additionally, you can use environment variables to set configuration options. Command line arguments will precede these.
|
||
|
|
||
|
```bash
|
||
|
$ DOTENV_CONFIG_<OPTION>=value node -r dotenv-expand/config your_script.js
|
||
|
```
|
||
|
|
||
|
```bash
|
||
|
$ DOTENV_CONFIG_ENCODING=latin1 node -r dotenv-expand/config your_script.js dotenv_config_path=/custom/path/to/.env
|
||
|
```
|
||
|
|
||
|
## Examples
|
||
|
|
||
|
See [tests/.env](https://github.com/motdotla/dotenv-expand/blob/master/tests/.env) for simple and complex examples of variable expansion in your `.env`
|
||
|
file.
|
||
|
|
||
|
## Documentation
|
||
|
|
||
|
DotenvExpand exposes one function:
|
||
|
|
||
|
* expand
|
||
|
|
||
|
### Expand
|
||
|
|
||
|
`expand` will expand your environment variables.
|
||
|
|
||
|
```js
|
||
|
const dotenv = {
|
||
|
parsed: {
|
||
|
BASIC: 'basic',
|
||
|
BASIC_EXPAND: '${BASIC}',
|
||
|
BASIC_EXPAND_SIMPLE: '$BASIC'
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const obj = dotenvExpand.expand(dotenv)
|
||
|
|
||
|
console.log(obj)
|
||
|
```
|
||
|
|
||
|
#### Options
|
||
|
|
||
|
##### ignoreProcessEnv
|
||
|
|
||
|
Default: `false`
|
||
|
|
||
|
Turn off writing to `process.env`.
|
||
|
|
||
|
```js
|
||
|
const dotenv = {
|
||
|
ignoreProcessEnv: true,
|
||
|
parsed: {
|
||
|
SHOULD_NOT_EXIST: 'testing'
|
||
|
}
|
||
|
}
|
||
|
const obj = dotenvExpand.expand(dotenv).parsed
|
||
|
|
||
|
console.log(obj.SHOULD_NOT_EXIST) // testing
|
||
|
console.log(process.env.SHOULD_NOT_EXIST) // undefined
|
||
|
```
|
||
|
|
||
|
## FAQ
|
||
|
|
||
|
### What rules does the expansion engine follow?
|
||
|
|
||
|
The expansion engine roughly has the following rules:
|
||
|
|
||
|
* `$KEY` will expand any env with the name `KEY`
|
||
|
* `${KEY}` will expand any env with the name `KEY`
|
||
|
* `\$KEY` will escape the `$KEY` rather than expand
|
||
|
* `${KEY:-default}` will first attempt to expand any env with the name `KEY`. If not one, then it will return `default`
|
||
|
|
||
|
You can see a full list of examples [here](https://github.com/motdotla/dotenv-expand/blob/master/tests/.env).
|
||
|
|
||
|
## Contributing Guide
|
||
|
|
||
|
See [CONTRIBUTING.md](CONTRIBUTING.md)
|
||
|
|
||
|
## CHANGELOG
|
||
|
|
||
|
See [CHANGELOG.md](CHANGELOG.md)
|
||
|
|
||
|
## Who's using dotenv-expand?
|
||
|
|
||
|
[These npm modules depend on it.](https://www.npmjs.com/browse/depended/dotenv-expand)
|