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