$ cnpm install universal-dotenv
Universal DotEnv - A Robust Environment Configuration for Universal Applications.
This solution is heavily inspired by the approach chosen by Create React App and made available for general usage.
.env files with overriding between different NODE_ENV settings and ENV_CONTEXT configurations.APP_ROOT which points to the absolute root folder.APP_SOURCE which points to the source folder.APP_ prefixed environment variables for usage as raw, stringified or webpack (for DefinePlugin)It is important to remember that all environment variables are always stored as strings. Even numbers and booleans. The casting to other types must therefore take place in the application code. See also: https://github.com/motdotla/dotenv/issues/51
NODE_ENV: Typically either production, development or testENV_CONTEXT: Often used for e.g. client or server. Can be also something totally custom e.g. docker, staging, etc.APP_ROOT: Points to the root folder of the application (absolute filesystem path)APP_SOURCE: Points to the source folder. If src exists this is being used. Otherwise the assumption is that it's identical to the APP_ROOT.Files are being loaded in this order. Values which are already set are never overwritten. Command line environment settings e.g. via cross-env always win.
.env.${ENV_CONTEXT}.${NODE_ENV}.local.env.${ENV_CONTEXT}.${NODE_ENV}.env.${ENV_CONTEXT}.local.env.${ENV_CONTEXT}.env.${NODE_ENV}.local.env.${NODE_ENV}.env.local.envNote: local files without NODE_ENV are not respected when running in NODE_ENV=test.
Variable expansion is supported by universal-dotenv. All identifiers in environment values prefixed by $ (dollar sign) or surrounded by ${NAME} are expanded. Used algorithm is:
See files in testcase/hierarchy for an example of a complex variable expansion.
All loading features are enabled by importing the core module itself and run init():
import { init } from "universal-dotenv"
init()
After this you can access all environment settings you have defined in one of your .env files.
console.log(process.env.APP_MY_ENV)
If you don't want to control the init process you can also register an automated version:
import "universal-dotenv/register"
This loads all environment settings on import of module.
The module offers access to all app specific environment settings which should be prefixed with APP_ e.g. APP_TITLE = "My App".
import { getEnvironment } from "universal-dotenv"
// This also loads all environment specific settings into `process.env`
const { raw, stringified, webpack } = getEnvironment()
Return values:
Webpack Usage:
import { getEnvironment } from "universal-dotenv"
const { webpack } = getEnvironment()
...
plugins.push(new webpack.DefinePlugin(webpack))
This method also supports custom filtering of the environment data to export using a key-based filter method.
Here you can see the example config for only exporting environment settings where the key starts with string MYKEY_.
const { raw, stringified, webpack } = getEnvironment({
filter: (key) => key.startsWith("MYKEY_")
})
By default the getEnvironment() method translates strings which look like numbers or booleans into their native type representation. To disable this behavior pass over false for enableTranslation like:
const { raw, stringified, webpack } = getEnvironment({ translate: false })
Apache License Version 2.0, January 2004
Copyright 2018-2021
Sebastian Software GmbH
Copyright 2013 - present © cnpmjs.org | Home |