-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwebpack.config.js
83 lines (82 loc) · 1.99 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
const path = require('path');
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
module.exports = (env) => {
return {
entry: {
App: './src/index.js',
main: './src/main.js'
/* main: *
but this is where you would put code that you need to be compiled in the browser seperate from the react app, like google analytics, google maps, facebook pixel stuff, adsense scripts etc
every framework has a mechanism for these things
*/
},
output: {
path: path.resolve(__dirname, 'public/js/dist'),
filename: '[name].[contenthash].js', // '[name].[contenthash].js' put this if you want to get hashed files to cache bust
sourceMapFilename:
process.env.NODE_ENV === 'dev'
? '[name].js.map'
: '[name].[contenthash].js.map',
publicPath: '/js/dist'
},
devtool: 'source-map',
module: {
rules: [
{
test: /\.m?js$/,
enforce: 'pre',
use: ['source-map-loader']
},
{
test: /\.js$/,
exclude: /node_modules/,
use: ['babel-loader']
},
{
test: /\.scss$/,
use: [
'style-loader',
{
loader: 'css-loader',
options: {
modules: true
}
},
'sass-loader',
'postcss-loader'
]
}
]
},
resolve: {
modules: ['node_modules']
},
plugins: [
new MiniCssExtractPlugin({
filename: 'style.[contenthash].css' // 'style.[contenthash].css' put this if you want to get hashed files to cache bust
}),
new HtmlWebpackPlugin({
inject: true,
hash: true,
template: './src/index.html',
children: false,
filename: '../../index.html'
}),
new CleanWebpackPlugin(),
new webpack.ProvidePlugin({
React: 'react'
})
],
optimization: {
splitChunks: {
chunks: 'all',
minSize: 0
},
usedExports: true,
sideEffects: true
}
};
};