-
Notifications
You must be signed in to change notification settings - Fork 8
/
webpack.common.js
103 lines (100 loc) · 2.79 KB
/
webpack.common.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
// NodeJS
const path = require('path');
const webpack = require('webpack');
// Webpack plugins
const HtmlWebPackPlugin = require("html-webpack-plugin");
// Helper Variables
const paths = {
entryClient: path.resolve(__dirname, "src", "client", 'index.js'),
src: path.resolve(__dirname, "src", "client", "index.html"),
dest: path.resolve(__dirname, 'public'),
destHtml: path.resolve(__dirname, 'public', 'index.html'),
contentBase: path.join(__dirname, 'public')
};
module.exports = {
devtool: "source-map",
entry: [
'@babel/polyfill',
'react-hot-loader/patch',
paths.entryClient
],
output: {
path: paths.dest,
filename: "bundle.js",
publicPath: "/",
libraryTarget: "umd"
},
module: {
rules: [
{
test: /\.(js|jsx)$/,
loader: 'babel-loader',
exclude: /node_modules/
},
{
test: /\.html$/,
use: [
{
loader: "html-loader",
options: { minimize: true }
}
]
},
{
test: /\.(scss|css)$/,
use: [{
loader: "style-loader"
}, {
loader: "css-loader", options: {
sourceMap: true
}
}, {
loader: "sass-loader", options: {
sourceMap: true
}
}]
}
]
},
plugins: [
new webpack.HotModuleReplacementPlugin(),
new HtmlWebPackPlugin({
template: paths.src,
filename: paths.destHtml
})
],
performance: {
hints: "warning",
maxAssetSize: 2000000, // Bytes..
maxEntrypointSize: 4000000, // Bytes..
assetFilter: function(filename) {
// If you would like to, you can exclude file types, names, etc here by providing an expression.
return true;
}
},
devServer: {
proxy: {
// proxy URLs to backend development server
'/api': 'http://localhost:3000'
},
contentBase: paths.contentBase,
compress: true, // enable gzip compression
disableHostCheck: true, // this can be dangerous, do not use unless on a private LAN in a safe network
historyApiFallback: true, // true for index.html upon 404, object for multiple paths
hot: true, // hot module replacement. Depends on HotModuleReplacementPlugin
host: '0.0.0.0', // listen on all interfaces
https: false, // true for self-signed, object for cert authority
noInfo: false, // only errors & warns on hot reload
port: 8080,
},
// advance misc config
cache: false,
bail: true,
profile: true,
watch: false,
watchOptions: {
aggregateTimeout: 1000,
poll: true,
poll: 500
}
};