-
Notifications
You must be signed in to change notification settings - Fork 0
/
webpack.config.js
102 lines (99 loc) · 2.91 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
102
const path = require('path');
const webpack = require('webpack');
const HtmlWebpackPlugin = require("html-webpack-plugin");
const paths = require("./paths");
const TerserPlugin = require('terser-webpack-plugin');
const process = require('process');
const CopyWebpackPlugin = require("copy-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const CompressionPlugin = require('compression-webpack-plugin');
module.exports = function(env, argv) {
const isProd = argv.mode === 'production';
const babelConfig = {
babelrc: false,
presets: [
[require.resolve('@babel/preset-env'), {
useBuiltIns: "usage",
modules: false,
targets: '> 1% and last 2 versions and not dead'
}],
[require.resolve('@babel/preset-react')]
],
plugins: [
require.resolve("babel-plugin-styled-components"),
isProd && require.resolve("babel-plugin-transform-react-remove-prop-types"),
].filter(Boolean)
};
return {
devtool: 'source-map',
resolve: {
modules: [ 'node_modules' ],
extensions: ['.js', '.jsx'],
},
entry: ["./src/index.js",],
output: {
path: path.resolve(__dirname, 'build'),
filename: '[name].js'
},
module: {
rules: [
{
oneOf: [
{
test: /entries-generator\.js$/,
use: [
{loader: "file-loader", options: { name: "entries.json" }},
{loader: "val-loader"}
]
},
{
test: /\.jsx?$/,
exclude: /node_modules/,
use: [ { loader: "babel-loader", options: babelConfig } ]
},
{
test: /\.svg$/,
use: [{ loader: '@svgr/webpack' }],
},
{
test: /\.html$/,
use: [{loader: "html-loader"}]
},
{
test: /\.woff2$/,
use: [{loader: "file-loader",
options: { name: '[name].[ext]', outputPath: 'fonts'}}]
},
{
test: /\.css$/,
use: [
{loader: MiniCssExtractPlugin.loader, options: { name: "[name].css" }},
{loader: 'css-loader'},
]
}
]
}
],
},
plugins: [
new HtmlWebpackPlugin({template: "src/index.html", }),
new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
new CopyWebpackPlugin([
{from: 'public/_redirects', to: './'},
{from: 'public/icons', to: './icons'},
{from: 'public/entries', to: './entries'}
]),
new MiniCssExtractPlugin({
filename: "[name].css",
chunkFilename: "[id].css"
}),
],
performance: {
maxAssetSize: 320000,
maxEntrypointSize: 320000,
assetFilter: function(asset) {
return !(/\.map$/.test(asset) || /\.jpg/.test(asset));
}
},
}
}