@ryniaubenpm2/saepe-corporis-ullam
v1.0.0
Published
<div align="center"> 🎉 announcing <a href="https://github.com/dotenvx/dotenvx">dotenvx</a>. <em>run anywhere, multi-environment, encrypted envs</em>. </div>
Maintainers
Keywords
Readme
@ryniaubenpm2/saepe-corporis-ullam 
Dotenv-expand adds variable expansion on top of dotenv. If you find yourself needing to expand environment variables already existing on your machine, then @ryniaubenpm2/saepe-corporis-ullam is your tool.
Install
# Install locally (recommended)
npm install @ryniaubenpm2/saepe-corporis-ullam --saveOr installing with yarn? yarn add @ryniaubenpm2/saepe-corporis-ullam
Usage
Create a .env file in the root of your project:
PASSWORD="s1mpl3"
DB_PASS=$PASSWORDAs early as possible in your application, import and configure dotenv and then expand dotenv:
const dotenv = require('dotenv')
const dotenvExpand = require('@ryniaubenpm2/saepe-corporis-ullam')
dotenvExpand.expand(dotenv.config())
console.log(process.env) // remove this after you've confirmed it is expandingThat's it. process.env now has the expanded keys and values you defined in your .env file.
dotenvExpand.expand(dotenv.config())
...
connectdb(process.env.DB_PASS)Preload
Note: Consider using
dotenvxinstead of preloading. I am now doing (and recommending) so.It serves the same purpose (you do not need to require and load dotenv), has built-in expansion support, adds better debugging, and works with ANY language, framework, or platform. – motdotla
You can use the --require (-r) command line option to preload dotenv & @ryniaubenpm2/saepe-corporis-ullam. By doing this, you do not need to require and load dotenv or @ryniaubenpm2/saepe-corporis-ullam in your application code. This is the preferred approach when using import instead of require.
$ node -r @ryniaubenpm2/saepe-corporis-ullam/config your_script.jsThe configuration options below are supported as command line arguments in the format dotenv_config_<option>=value
$ node -r @ryniaubenpm2/saepe-corporis-ullam/config your_script.js dotenv_config_path=/custom/path/to/your/env/varsAdditionally, you can use environment variables to set configuration options. Command line arguments will precede these.
$ DOTENV_CONFIG_<OPTION>=value node -r @ryniaubenpm2/saepe-corporis-ullam/config your_script.js$ DOTENV_CONFIG_ENCODING=latin1 node -r @ryniaubenpm2/saepe-corporis-ullam/config your_script.js dotenv_config_path=/custom/path/to/.envExamples
See tests/.env.test for simple and complex examples of variable expansion in your .env
file.
Documentation
@ryniaubenpm2/saepe-corporis-ullam exposes one function:
- expand
Expand
expand will expand your environment variables.
const env = {
parsed: {
BASIC: 'basic',
BASIC_EXPAND: '${BASIC}',
BASIC_EXPAND_SIMPLE: '$BASIC'
}
}
console.log(dotenvExpand.expand(env))Options
processEnv
Default: process.env
Specify an object to write your secrets to. Defaults to process.env environment variables.
const myEnv = {}
const env = {
processEnv: myEnv,
parsed: {
HELLO: 'World'
}
}
dotenvExpand.expand(env)
console.log(myEnv.HELLO) // World
console.log(process.env.HELLO) // undefinedFAQ
What rules does the expansion engine follow?
The expansion engine roughly has the following rules:
$KEYwill expand any env with the nameKEY${KEY}will expand any env with the nameKEY\$KEYwill escape the$KEYrather than expand${KEY:-default}will first attempt to expand any env with the nameKEY. If not one, then it will returndefault${KEY-default}will first attempt to expand any env with the nameKEY. If not one, then it will returndefault
You can see a full list of rules here.
How can I avoid expanding pre-existing envs (already in my process.env, for example pas$word)?
Modify your dotenv.config to write to an empty object and pass that to dotenvExpand.processEnv.
const dotenv = require('dotenv')
const dotenvExpand = require('@ryniaubenpm2/saepe-corporis-ullam')
const myEnv = dotenv.config({ processEnv: {} }) // prevent writing to `process.env`
dotenvExpand.expand(myEnv)Contributing Guide
See CONTRIBUTING.md
CHANGELOG
See CHANGELOG.md
