const HtmlWebpackPlugin = require('html-webpack-plugin'); const MiniCSSExtractPlugin = require('mini-css-extract-plugin'); const path = require('path'); // let htmlPageNames = []; // let multipleHtmlPlugins = htmlPageNames.map(name => { // return new HtmlWebpackPlugin({ // template: `./src/views/${name}.html`, // relative path to the HTML files // filename: `${name}.html`, // output HTML files // chunks: [`${name}`] // respective JS files // }) // }); module.exports = { resolve: { extensions: ['.js', '.jsx'], fallback: { "querystring": require.resolve("querystring-es3") } }, module: { rules: [ // HTML { test: /\.html$/, use: { loader: 'html-loader', }, }, // JS { test: /\.jsx?$/i, exclude: /node_modules/, include: path.resolve(__dirname, 'src'), use: { loader: 'babel-loader', options: { presets: [ '@babel/preset-env', ['@babel/preset-react', { runtime: 'automatic' }], ], }, }, }, // CSS { test: /\.s[ac]ss$/i, use: [ MiniCSSExtractPlugin.loader, 'css-loader', 'postcss-loader', 'resolve-url-loader', 'sass-loader', ], }, // Images { test: /\.(png|svg|jpg|jpeg|gif)$/i, type: 'asset', }, // { // test: /\.(jpg|png|gif|svg)$/, // use: { // loader: 'url-loader' // } // }, // { // test: /\.(jpg|png|gif|svg)$/, // use: // [ // { // loader: 'file-loader', // options: // { // outputPath: './assets/images/' // } // } // ] // }, // Fonts { test: /\.(woff|woff2|eot|ttf|otf)$/i, type: 'asset/resource', }, // { // test: /\.(ttf|eot|woff|woff2)$/, // use: // [ // { // loader: 'file-loader', // options: // { // outputPath: './assets/fonts/' // } // } // ] // } ], }, plugins: [ new HtmlWebpackPlugin({ template: path.resolve(__dirname, './src/views/index.html'), inject: 'body', }), ], optimization: { moduleIds: 'deterministic', runtimeChunk: 'single', splitChunks: { cacheGroups: { vendor: { test: /[\\/]node_modules[\\/]/, name: 'vendors', chunks: 'all', }, }, }, }, };