const HtmlWebPackPlugin = require('html-webpack-plugin') const CopyWebpackPlugin = require('copy-webpack-plugin') const MiniCssExtractPlugin = require('mini-css-extract-plugin') const { CleanWebpackPlugin } = require('clean-webpack-plugin') const dotenv = require('dotenv') const webpack = require('webpack') var path = require('path') module.exports = () => { // call dotenv and it will return an Object with a parsed key console.log('PROCESS', process.env.NODE_ENV) const env = dotenv.config().parsed // console.log('process------', process.env.API_KEY) // console.log('env------', dotenv.config()) // reduce env variables to an oject const envKeys = Object.keys(env).reduce((prev, next) => { prev[`process.env.${next}`] = JSON.stringify(env[next]) return prev }, {}) console.log('key', envKeys) return { entry: './src/index.js', output: { path: path.resolve(__dirname, 'dist'), filename: 'bundle.js', publicPath: '/', }, module: { rules: [ { test: /\.js$/, exclude: /node_modules/, use: { loader: 'babel-loader', }, }, { test: /\.svg$/, exclude: /node_modules/, use: { loader: 'svg-react-loader', }, }, { test: /\.css$/, include: /node_modules/, use: ['style-loader', 'css-loader'], }, { test: /\.scss$/, use: [ { loader: MiniCssExtractPlugin.loader, options: { publicPath: '../', }, }, 'css-loader', 'sass-loader', ], }, { test: /\.(gif|png|jpe?g)$/i, use: [ 'file-loader', { loader: 'image-webpack-loader', options: { bypassOnDebug: true, // webpack@1.x disable: true, // webpack@2.x and newer }, }, ], }, ], }, devServer: { historyApiFallback: true, }, node: { global: true, }, plugins: [ new webpack.DefinePlugin(envKeys), new HtmlWebPackPlugin({ template: './src/index.html', filename: './index.html', }), new CopyWebpackPlugin({ patterns: [ { from: 'src/static/images', to: 'static/images', }, ], }), new MiniCssExtractPlugin({ filename: 'main.css', }), new CleanWebpackPlugin(), ], } }