-
Notifications
You must be signed in to change notification settings - Fork 4
/
webpack.prod.config.js
110 lines (106 loc) · 2.97 KB
/
webpack.prod.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
102
103
104
105
106
107
108
109
110
const path = require('path');
const { optimize, LoaderOptionsPlugin } = require('webpack');
const {
ModuleConcatenationPlugin,
} = optimize;
const webpackMerge = require('webpack-merge');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const CompressionPlugin = require('compression-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const CSSOWebpackPlugin = require('csso-webpack-plugin').default;
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
const WorkboxWebpackPlugin = require('workbox-webpack-plugin');
const paths = require('./paths');
const webpackBaseConfig = require('./webpack.base.config');
module.exports = webpackMerge(webpackBaseConfig, {
entry: {
app: path.resolve(paths.app, 'client.jsx'),
},
output: {
filename: '[name].bundle-[chunkhash].js',
chunkFilename: '[name].bundle-[chunkhash].js',
path: paths.build,
publicPath: '/',
sourceMapFilename: '[name].bundle-[chunkhash].map',
},
module: {
rules: [
{
test: /\.jsx?$/,
exclude: /node_modules\/(?!(autotrack|dom-utils))/,
loader: 'babel-loader'
},
{
test: /\.(png|jpg|jpeg|gif|svg|woff|woff2|ttf|eot|cur)$/,
loader: 'file-loader',
options: {
name: 'assets/[hash].[ext]',
},
},
{
test: /\.scss$/,
loader: ExtractTextPlugin.extract({
fallback: 'style-loader',
use: [
'css-loader',
{
loader: 'postcss-loader',
options: {
sourceMap: true,
},
},
'resolve-url-loader',
{
loader: 'sass-loader',
options: {
sourceMap: true,
},
},
{
loader: 'sass-resources-loader',
options: {
resources: [
'./app/scss/base/**/_*.scss',
],
}
}
],
}),
}
],
},
plugins: [
new CleanWebpackPlugin(['build/*'], {
dry: false,
verbose: true,
}),
new CopyWebpackPlugin([
{
context: paths.public,
from: '*.*',
ignore: ['service-worker.js'],
},
]),
new ExtractTextPlugin({
allChunks: true,
filename: 'app.bundle-[chunkhash].css',
}),
new CSSOWebpackPlugin(),
new LoaderOptionsPlugin({ minimize: true, debug: false }),
new ModuleConcatenationPlugin(),
new UglifyJsPlugin(),
new CompressionPlugin({
asset: '[path].gz[query]',
algorithm: 'gzip',
test: /\.(js|css)$/,
minRatio: 0.8,
}),
new WorkboxWebpackPlugin({
swSrc: 'public/service-worker.js',
swDest: 'build/service-worker.js',
globPatterns: ['**/*.{html,js,css,png,jpg,json}'],
globIgnores: ['**/service-worker.js', 'index.html', 'workbox-sw.js'],
}),
],
});