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 ( Object.keys(values) // Stringify all values so they can be fed into Webpack's DefinePlugin. .reduce((value, key) => { value[`process.env.${key}`] = JSON.stringify(values[key]); return value; }, {}) ); }; module.exports = MixDefinitionsPlugin;