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: { modules: [path.resolve(__dirname, "src"), "node_modules"], 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"), segmentKey: `${process.env.SEGMENT_PUBLIC_KEY}`, }), new webpack.DefinePlugin(envKeys), ], }; };