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),
],
};
};