-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwebpack.config.js
101 lines (97 loc) · 3.63 KB
/
webpack.config.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
92
93
94
95
96
97
98
99
100
101
// Require necessary modules
const webpack = require("webpack");
const path = require("path");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const UglifyJSPlugin = require("uglifyjs-webpack-plugin");
const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin");
// https://formidable.com/blog/2018/finding-webpack-duplicates-with-inspectpack-plugin/
const { DuplicatesPlugin } = require("inspectpack/plugin");
const DashboardPlugin = require("webpack-dashboard/plugin");
// Store NODE_ENV value
const env = process.env.NODE_ENV;
let config = {
// Current "env" or fallback to development
mode: env || "development",
// Entries in project "/public-dev" directory
entry: {
"babel-polyfill": ["./src/js/app-babel-polyfill.js"],
"common": ["./src/js/app-common.js"],
"uikit": ["./src/js/app-uikit-dev.js"],
"add-trick-deletion-with-scroll": ["./src/js/app-add-trick-deletion-with-scroll.js"],
"add-user-deletion-with-scroll": ["./src/js/app-add-user-deletion-with-scroll.js"],
"create-or-list-trick-comment": ["./src/js/app-create-or-list-trick-comment.js"],
"create-or-update-trick": ["./src/js/app-create-or-update-trick.js"],
"home-trick-list": ["./src/js/app-home.js"],
"paginated-trick-list": ["./src/js/app-paginated-list.js"],
"scroll-to-media-box-with-hash": ["./src/js/app-scroll-to-media-box-with-hash.js"],
"single-trick": ["./src/js/app-single.js"],
"sort-media-box": ["./src/js/app-sort-media-box.js"],
"update-profile": ["./src/js/app-update-profile.js"]
},
// Outputs in Symfony project "/public" directory
output: {
path: path.resolve(__dirname, "../public/assets/js"),
filename: "./[name].js",
globalObject: 'this'
},
module: {
rules: [{
// From ES6 to ES5
test: /\.js$/,
exclude: /node_modules/,
loader: "babel-loader"
},
{
// SASS: loaders are used from right to left.
test: /\.sa|css$/,
loader: [MiniCssExtractPlugin.loader, "css-loader", "postcss-loader", "sass-loader"]
}]
},
plugins: [
new MiniCssExtractPlugin({
filename: "../css/[name].css",
chunkFilename: "[id].css"
}),
new DuplicatesPlugin({
// Emit compilation warning or error? (Default: `false`)
emitErrors: false,
// Display full duplicates information? (Default: `false`)
verbose: false
}),
new DashboardPlugin()
],
};
module.exports = config;
if (env !== "production") {
module.exports.devtool = "cheap-module-source-map"; // "eval-source-map" // "source-map" ...
}
if (env === "production") {
module.exports.optimization.minimizer.push(
// Minify JS
new UglifyJSPlugin({
cache: true,
parallel: true,
sourceMap: false,
// Added on 20/02/2019
// https://stackoverflow.com/questions/34239731/how-to-minimize-the-size-of-webpacks-bundle
mangle: true,
compress: {
warnings: false,
pure_getters: true,
unsafe: true,
unsafe_comps: true,
screw_ie8: true,
conditionals: true,
unused: true,
comparisons: true,
sequences: true,
dead_code: true,
evaluate: true,
if_return: true,
join_vars: true
}
}),
// Minify CSS
new OptimizeCSSAssetsPlugin({})
);
}