const path = require('path'); const glob = require('glob'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const PurgecssPlugin = require('purgecss-webpack-plugin'); const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin'); const CopyPlugin = require('copy-webpack-plugin'); module.exports = { entry: './src/app.ts', module: { rules: [ { test: /\.tsx?$/, use: 'ts-loader', exclude: /node_modules/, }, { test: /\.css$/i, use: [MiniCssExtractPlugin.loader, "css-loader"], }, { test: /\.(png|jpg|jpeg|gif)$/i, type: "asset/resource", }, ], }, resolve: { extensions: ['.tsx', '.ts', '.js'], plugins: [new TsconfigPathsPlugin({})] }, output: { filename: '[name].js', path: path.resolve(__dirname, './www/'), clean: true, }, plugins: [ new HtmlWebpackPlugin({ template: './src/index.html', hash: true }), new MiniCssExtractPlugin({ filename: "[name].css", }), new PurgecssPlugin({ paths: glob.sync('./src/**/*', { nodir: true }), safelist: ['html', 'body'] }), new CopyPlugin({ patterns: [ 'src/manifest.webmanifest' ], }), ] };