Files
portfolio-redesign/webpack.prod.js
2022-03-12 18:55:57 -07:00

79 lines
2.3 KiB
JavaScript

const { merge } = require('webpack-merge');
const commonConfiguration = require('./webpack.common.js');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const path = require('path');
const MiniCSSExtractPlugin = require('mini-css-extract-plugin');
const HtmlCriticalPlugin = require('html-critical-webpack-plugin');
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
const ImageMinimizerPlugin = require('image-minimizer-webpack-plugin');
module.exports = merge(commonConfiguration, {
mode: 'production',
entry: {
portfolio: path.resolve(__dirname, './src/scripts/app.js'),
},
devtool: 'source-map',
output: {
filename: 'js/[name].[contenthash].js',
path: path.resolve(__dirname, './dist'),
clean: true,
assetModuleFilename: 'assets/images/[name][ext][query]',
},
plugins: [
new CleanWebpackPlugin(),
new MiniCSSExtractPlugin({
filename: 'css/[name].[contenthash].css',
}),
// new ImageMinimizerPlugin({
// minimizerOptions: {
// // Lossless optimization with custom option
// // Feel free to experiment with options for better result for you
// plugins: [
// ['gifsicle', { interlaced: true }],
// ['jpegtran', { progressive: true }],
// ['optipng', { optimizationLevel: 5 }],
// // Svgo configuration here https://github.com/svg/svgo#configuration
// [
// 'svgo',
// {
// plugins: [
// {
// name: 'removeViewBox',
// active: false,
// },
// {
// name: 'addAttributesToSVGElement',
// params: {
// attributes: [{ xmlns: 'http://www.w3.org/2000/svg' }],
// },
// },
// ],
// },
// ],
// ],
// },
// }),
new HtmlCriticalPlugin({
base: path.join(path.resolve(__dirname), 'dist/'),
src: 'index.html',
dest: 'index.html',
inline: true,
minify: true,
extract: true,
width: 375,
height: 565,
penthouse: {
blockJSRequests: false,
},
}),
],
optimization: {
minimize: true,
minimizer: [
new CssMinimizerPlugin({
parallel: true,
}),
],
},
});