const path = require("path"); const HtmlWebpackPlugin = require("html-webpack-plugin"); const webpack = require("webpack"); const plugins = [ new HtmlWebpackPlugin({ favicon: "./public/favicon.ico", template: "./public/index.html", }), new webpack.ProvidePlugin({ Buffer: ["buffer", "Buffer"], }), new webpack.ProvidePlugin({ process: "process/browser", }), require("tailwindcss"), new webpack.ContextReplacementPlugin(/sodium/, (data) => { delete data.dependencies[0].critical; return data; }), ]; module.exports = (env, argv) => ({ entry: "./src/main.jsx", mode: argv.mode || "development", devtool: argv.mode === "production" ? false : "eval-source-map", plugins, output: { clean: true, path: path.resolve(__dirname, "build"), assetModuleFilename: "assets/[fullhash:12][ext]", filename: "main.[fullhash:8].js", }, devServer: { open: true, static: { directory: path.join(__dirname, "public"), }, compress: true, port: "auto", hot: true, client: { progress: true, }, proxy: { "/api/**": { target: "https://tn-alpha.idntty.org:8080/", secure: false, changeOrigin: true, }, }, }, ignoreWarnings: [() => false], module: { rules: [ { test: /\.(html)$/, use: ["html-loader"] }, { test: /\.m?jsx?$/, exclude: /(node_modules|bower_components)/, use: { loader: "babel-loader", }, }, { test: /\.scss$/, use: [ { loader: "style-loader", }, { loader: "css-loader", }, { loader: "postcss-loader", }, { loader: "sass-loader", }, ], }, { test: /\.(png|svg|jpg|gif)$/, loader: "file-loader", options: { outputPath: "assets", }, }, ], }, resolve: { extensions: [".js", ".jsx"], fallback: { path: require.resolve("path-browserify"), os: require.resolve("os-browserify/browser"), querystring: require.resolve("querystring-es3"), crypto: require.resolve("crypto-browserify"), util: require.resolve("util/"), stream: require.resolve("stream-browserify"), url: require.resolve("url/"), buffer: require.resolve("buffer/"), fs: false, }, }, });