Files
panaetius-theme/webpack.prod.js

58 lines
1.4 KiB
JavaScript

const webpack = require("webpack");
const common = require("./webpack.common");
const merge = require("webpack-merge");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const TerserPlugin = require("terser-webpack-plugin");
const CssMinimizer = require("optimize-css-assets-webpack-plugin");
const PurgeCssPlugin = require("purgecss-webpack-plugin");
const glob = require("glob");
const path = require("path");
module.exports = merge(common, {
mode: "production",
devtool: "none",
output: {
filename: "[name].[contenthash].min.js",
chunkFilename: "[id].[name].[contenthash].min.js",
publicPath: "/dist/",
},
module: {
rules: [
{
test: /\.(sa|sc|c)ss$/,
use: [
"style-loader",
MiniCssExtractPlugin.loader,
"css-loader",
"postcss-loader",
"sass-loader",
],
},
{
test: /\.(ttf|otf)$/,
use: ["file-loader"],
},
],
},
plugins: [
new MiniCssExtractPlugin({
filename: "[name].[contenthash].min.css",
chunkFilename: "[name].[contenthash].min.css",
sourceMap: true,
}),
new webpack.HashedModuleIdsPlugin(),
new PurgeCssPlugin({
paths: glob.sync(path.join(__dirname, "layouts") + "/**/*.html", {
nodir: true,
}),
}),
],
optimization: {
minimize: true,
minimizer: [
new TerserPlugin({ extractComments: false }),
new CssMinimizer(),
],
},
});