What is dotenv-webpack?
The dotenv-webpack npm package is a plugin for webpack that automates the loading of environment variables from a .env file into process.env, providing an easy way to configure your application's environment-specific variables. It wraps dotenv and Webpack.DefinePlugin under the hood.
What are dotenv-webpack's main functionalities?
Load environment variables
Automatically loads environment variables from a .env file and makes them available in your application through process.env.
const Dotenv = require('dotenv-webpack');
module.exports = {
//... other webpack config
plugins: [
new Dotenv()
]
//... other webpack config
};
Custom .env file path
Allows you to specify a custom path to your .env file if it's not located in the root directory.
const Dotenv = require('dotenv-webpack');
module.exports = {
//... other webpack config
plugins: [
new Dotenv({
path: './some/other/path/.env'
})
]
//... other webpack config
};
Safe mode
Enables safe mode to ensure that all necessary environment variables are defined, by comparing with a template file (usually .env.example).
const Dotenv = require('dotenv-webpack');
module.exports = {
//... other webpack config
plugins: [
new Dotenv({
safe: true // load '.env.example' to check all necessary variables are defined
})
]
//... other webpack config
};
System variables
Allows the inclusion of system environment variables in the webpack build in addition to the variables from the .env file.
const Dotenv = require('dotenv-webpack');
module.exports = {
//... other webpack config
plugins: [
new Dotenv({
systemvars: true // load all system environment variables in addition to .env file
})
]
//... other webpack config
};
Other packages similar to dotenv-webpack
env-cmd
env-cmd is a simple node program for executing commands using an environment from an env file. It's not a webpack plugin but can be used in conjunction with npm scripts to achieve similar results.
cross-env
cross-env allows you to set and use environment variables across platforms without worrying about platform-specific issues. It's not a webpack plugin but can be used in npm scripts to manage environment variables.
dotenv-webpack
A secure webpack plugin that supports dotenv and other environment variables and only exposes what you choose and use.
Status
Installation
Include the package locally in your repository.
npm install dotenv-webpack --save
Description
dotenv-webpack
wraps dotenv
and Webpack.DefinePlugin
. As such, it overwrites existing any existing DefinePlugin
configurations. Also, like DefinePlugin
, it does a text replace in the resulting bundle for any instances of process.env
.
Your .env
files can include sensitive information. Because of this,dotenv-webpack
will only expose environment variables that are explicily referenced in your code to your final bundle.
Usage
The plugin can be installed with little-to-no configuration needed. Once installed, you can access the variables within your code using process.env
as you would with dotenv
.
The example bellow shows a standard use-case.
Create a .env file
// .env
DB_HOST=127.0.0.1
DB_PASS=foobar
S3_API=mysecretkey
Add it to your Webpack config file
const Dotenv = require('dotenv-webpack');
module.exports = {
...
plugins: [
new Dotenv({
path: './.env',
safe: true
})
]
...
};
Use in your code
// file1.js
console.log(process.env.DB_HOST);
// '127.0.0.1'
Resulting bundle
// bundle.js
console.log('127.0.0.1');
Note: the .env
values for DB_PASS
and S3_API
are NOT present in our bundle, as they were never referenced (as process.env.[VAR_NAME]
) in the code.
How Secure?
Be allowing you to define exactly where you are loading environment variables from, and bundling only variables in your project that are explicitly referenced in your code, you can be sure that only what you need is included and you do not accidentally leak anything sensitive.
Recommended
Add .env
to your .gitignore
file
Properties
Use the following properties to configure your instance.
- path (
'./.env'
) - The path to your environment variables. - safe (
false
) - If false ignore safe-mode, if true load './.env.example'
, if a string load that file as the sample. - systemvars (
false
) - Set to true if you would rather load all system variables as well (useful for CI purposes). - silent (
false
) - If true, all warnings will be surpressed.
LICENSE
MIT