const path = require('path'); const HtmlWebpackPlugin = require("html-webpack-plugin"); const webpack = require('webpack'); const dotenv = require('dotenv'); module.exports = () => { const env = dotenv.config().parsed; const envKeys = Object.keys(env).reduce((prev, next) => { prev[`process.env.${next}`] = JSON.stringify(env[next]); return prev; }, {}); return { entry: './src/index.tsx', target: 'web', mode: 'development', module: { rules: [ { test: /\.(ts|tsx)$/, loader: "ts-loader", }, { enforce: "pre", test: /\.js$/, loader: "source-map-loader", }, { test: /\.(png|svg|jpg|gif|mp3)$/, use: [ 'file-loader' ] }, { test: /\.css$/, use: [ 'css-loader' ] }, { test: /\.(woff(2)?|ttf|eot)(\?v=\d+\.\d+\.\d+)?$/, use: [ { loader: 'file-loader', options: { name: '[name].[ext]', outputPath: 'fonts/' } } ] } ], }, resolve: { extensions: ['*', '.tsx', '.ts', '.js', '.jsx', '.json'], }, output: { filename: 'bundle.js', path: path.resolve(__dirname, 'build'), publicPath: '/' }, devServer: { historyApiFallback: true, }, plugins: [ new HtmlWebpackPlugin({ template: path.resolve(__dirname, "src", "index.html"), }), new webpack.DefinePlugin(envKeys) ] } };