1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- 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;
|