const path = require('path'); const webpack = require('webpack'); const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin'); const isDevelopment = process.env.NODE_ENV !== 'production'; module.exports = { entry: './app/frontend/index.tsx', output: { path: path.resolve(__dirname, 'public/js'), filename: 'bundle.js', publicPath: '/js/', }, resolve: { extensions: ['.tsx', '.ts', '.js'], }, devServer: { static: { directory: path.join(__dirname, 'public'), }, hot: true, port: 8080, historyApiFallback: true, }, plugins: [ isDevelopment && new webpack.HotModuleReplacementPlugin(), isDevelopment && new ReactRefreshWebpackPlugin(), ].filter(Boolean), module: { rules: [ { test: /\.(js|jsx|ts|tsx)$/, exclude: /node_modules/, use: [ { loader: 'babel-loader', options: { presets: [ '@babel/preset-env', '@babel/preset-react', '@babel/preset-typescript', ], plugins: [ isDevelopment && 'react-refresh/babel', ].filter(Boolean), }, }, ], }, { test: /\.css$/i, use: ['style-loader', 'css-loader', 'postcss-loader'], }, ], }, mode: isDevelopment ? 'development' : 'production', };