generated from mosiichuk/frontend-base
/
webpack.plugins.js
91 lines (82 loc) · 2.41 KB
/
webpack.plugins.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
const path = require('path');
const fs = require('fs');
const glob = require('glob');
const webpack = require("webpack");
const {
CleanWebpackPlugin
} = require('clean-webpack-plugin');
const HTMLWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
const config = require('./site.config');
const FaviconsWebpackPlugin = require("favicons-webpack-plugin");
const CopyPlugin = require('copy-webpack-plugin');
const copyPlugin = new CopyPlugin({
patterns: [
{
from: 'js/particle.js',
to: 'js/particle.js',
toType: 'file'
},
],
});
const optimizeCss = new CssMinimizerPlugin({
minimizerOptions: {
preset: [
'default',
{
discardComments: {removeAll: true},
},
],
},
});
const clean = new CleanWebpackPlugin();
const cssExtract = new MiniCssExtractPlugin({
filename: './style.[contenthash].css',
});
const generateHTMLPlugins = () => glob.sync('./src/**/*.html')
.filter(dir => !dir.includes("partials"))
.map((dir) => {
const filename = path.basename(dir);
return new HTMLWebpackPlugin({
filename,
template: path.join(config.root, dir),
meta: {
viewport: config.viewport,
},
title: config.site_name,
description: config.site_description
});
});
const favicons = new FaviconsWebpackPlugin({
logo: config.favicon,
prefix: './img/favicons/',
favicons: {
appName: config.site_name,
appDescription: config.site_description,
icons: {
android: true,
appleIcon: true,
appleStartup: false,
coast: false,
favicons: true,
firefox: false,
windows: false,
yandex: false,
},
},
});
const env = new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
'process.env.PWD': JSON.stringify(process.env.PWD),
'process.env.PORT': JSON.stringify(process.env.PORT),
});
module.exports = [
config.isProduction && copyPlugin,
clean,
env,
cssExtract,
...generateHTMLPlugins(),
fs.existsSync(config.favicon) && favicons,
config.isProduction && optimizeCss,
].filter(Boolean);