const path = require('path'); const TerserPlugin = require('terser-webpack-plugin'); const { CleanWebpackPlugin } = require('clean-webpack-plugin'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const MiniCSSExtractPlugin = require('mini-css-extract-plugin'); const CopyPlugin = require('copy-webpack-plugin'); module.exports = { mode: 'production', entry: { index: './src/index.js' }, output: { path: __dirname + '/dist', filename: '[name].js', libraryTarget: 'var', // `library` determines the name of the global variable library: '[name]' }, optimization: { minimize: true, minimizer: [ new TerserPlugin({ minify: TerserPlugin.uglifyJsMinify, terserOptions: {} }) ], }, plugins: [ new CleanWebpackPlugin({ cleanAfterEveryBuildPatterns: ['dist'] }), new CopyPlugin({ patterns: [ { from: 'src/icon.*', to: "[name][ext]" }, { from: 'src/appinfo.json', to: "appinfo.json" }, { from: 'src/images/*', to: 'images/[name][ext]' }, { from: 'src/templates/*', to: 'templates/[name][ext]' } ] }), new HtmlWebpackPlugin({ template: 'src/index.html', filename: 'index.html', inject: 'body' }), new MiniCSSExtractPlugin({ filename: 'app.css' }) ], module: { rules: [ { test: /\.css$/, use: [ 'style-loader', 'css-loader' ] }, { test: /\.scss$/, use: [ MiniCSSExtractPlugin.loader, "css-loader", { loader: 'sass-loader', options: { sassOptions: { indentWidth: 4, includePaths: ['./src', './node_modules'], }, }, }, ] }, { test: /\.(woff(2)?|ttf|eot|svg)(\?v=\d+\.\d+\.\d+)?$/, type: 'asset/resource', generator: { filename: 'fonts/[name][ext]' } }, { test: /\.(gif|png|jpe?g|svg)$/i, type: 'asset/resource' } ] }, devServer: { static: path.join(__dirname, 'dist'), compress: true, port: 9000 } };