webpack.config.js in trestle-0.9.5 vs webpack.config.js in trestle-0.9.6

- old
+ new

@@ -1,43 +1,27 @@ const path = require('path'); -const Uglify = require('uglify-js'); -const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); -const MiniCssExtractPlugin = require('mini-css-extract-plugin'); -const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin'); const CopyWebpackPlugin = require('copy-webpack-plugin'); +const CssMinimizerPlugin = require('css-minimizer-webpack-plugin'); +const MiniCssExtractPlugin = require('mini-css-extract-plugin'); +const TerserPlugin = require('terser-webpack-plugin'); module.exports = { + mode: 'production', entry: path.resolve(__dirname, 'frontend/index.js'), output: { library: 'Trestle', libraryExport: 'Trestle', filename: 'bundle.js', path: path.resolve(__dirname, 'app/assets/bundle/trestle') }, optimization: { - splitChunks: { - cacheGroups: { - styles: { - name: 'styles', - test: /\.css$/, - chunks: 'all', - enforce: true - } - } - }, minimizer: [ - new UglifyJsPlugin({ - cache: true, - parallel: true, - sourceMap: true + new TerserPlugin({ + extractComments: false }), - new OptimizeCSSAssetsPlugin({ - cssProcessorPluginOptions: { - preset: ['default', { normalizePositions: false }] - } - }) + new CssMinimizerPlugin() ] }, module: { rules: [ { @@ -47,56 +31,60 @@ { loader: 'babel-loader' } ] }, { test: /\.(ttf|eot|svg|woff2?)(\?[\s\S]+)?$/, - use: { - loader: 'file-loader', - options: { - name: '[name].[ext]' - } - } + type: 'asset/resource' }, { test: /\.(png|jpg|gif)$/i, - exclude: /node_modules/, - use: { - loader: 'url-loader' - } + type: 'asset/inline' }, { test: /\.s?[ac]ss$/, use: [ { loader: MiniCssExtractPlugin.loader }, { loader: 'css-loader' }, - { loader: 'postcss-loader', options: { plugins: [ require('autoprefixer') ] } }, + { + loader: 'postcss-loader', + options: { + postcssOptions: { + plugins: [ + ['autoprefixer', {}] + ] + } + } + }, { loader: 'sass-loader' } ] }, { test: require.resolve('jquery'), use: [{ loader: 'expose-loader', - options: 'jQuery' - }, { - loader: 'expose-loader', - options: '$' + options: { + exposes: ['$', 'jQuery'] + } }] } ] }, plugins: [ - new CopyWebpackPlugin([ - { from: 'node_modules/@fortawesome/fontawesome-free/webfonts/*', to: '[name].[ext]' }, - { - from: 'node_modules/flatpickr/dist/l10n/*.js', - to: 'flatpickr/[name].[ext]', - ignore: ['index.js'], - transform: function(fileContent, path) { - return Uglify.minify(fileContent.toString()).code.toString(); + new CopyWebpackPlugin({ + patterns: [ + { + from: 'node_modules/@fortawesome/fontawesome-free/webfonts/*', + to: '[name][ext]' + }, + { + from: 'node_modules/flatpickr/dist/l10n/*.js', + to: 'flatpickr/[name][ext]', + globOptions: { + ignore: ['**/index.js'] + } } - } - ]), + ] + }), new MiniCssExtractPlugin({ filename: 'bundle.css' }) ], resolve: {