60 lines
1.4 KiB
JavaScript
Vendored
60 lines
1.4 KiB
JavaScript
Vendored
let webpack = require('webpack');
|
|
let dotenv = require('dotenv');
|
|
let expand = require('dotenv-expand');
|
|
|
|
/**
|
|
* Create a new plugin instance.
|
|
*
|
|
* @param {string} envPath
|
|
*/
|
|
function MixDefinitionsPlugin(envPath) {
|
|
expand(
|
|
dotenv.config({
|
|
path: envPath || Mix.paths.root('.env')
|
|
})
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Build up the necessary definitions and add them to the DefinePlugin.
|
|
*
|
|
* @param {Object|null} merge
|
|
*/
|
|
MixDefinitionsPlugin.build = function(merge = {}) {
|
|
return new webpack.DefinePlugin(
|
|
new MixDefinitionsPlugin().getDefinitions(merge)
|
|
);
|
|
};
|
|
|
|
/**
|
|
* Build all MIX_ definitions for Webpack's DefinePlugin.
|
|
*
|
|
* @param {object} merge
|
|
*/
|
|
MixDefinitionsPlugin.prototype.getDefinitions = function(merge) {
|
|
let regex = /^MIX_/i;
|
|
|
|
// Filter out env vars that don't begin with MIX_.
|
|
let env = Object.keys(process.env)
|
|
.filter(key => regex.test(key))
|
|
.reduce((value, key) => {
|
|
value[key] = process.env[key];
|
|
|
|
return value;
|
|
}, {});
|
|
|
|
let values = Object.assign(env, merge);
|
|
|
|
return {
|
|
'process.env': Object.keys(values)
|
|
// Stringify all values so they can be fed into Webpack's DefinePlugin.
|
|
.reduce((value, key) => {
|
|
value[key] = JSON.stringify(values[key]);
|
|
|
|
return value;
|
|
}, {})
|
|
};
|
|
};
|
|
|
|
module.exports = MixDefinitionsPlugin;
|