-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwebpack-config-modified.js
83 lines (81 loc) · 2.46 KB
/
webpack-config-modified.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 LoadableWebpackPlugin = require("@loadable/webpack-plugin");
const BundleAnalyzerPlugin = require("webpack-bundle-analyzer").BundleAnalyzerPlugin;
const Visualizer = require("webpack-visualizer-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
module.exports = {
modify: (config, { target, dev }) => {
const appConfig = Object.assign({}, config);
if (target === "web") {
const filename = path.resolve(__dirname, "build");
appConfig.plugins = [
...appConfig.plugins,
new LoadableWebpackPlugin({
outputAsset: false,
writeToDisk: { filename },
})
];
appConfig.optimization = {
...appConfig.optimization,
splitChunks: {
chunks: "all",
automaticNameDelimiter: "-",
},
};
}
if (true) {
const sassRules = {
test: /\.scss$/,
use: [
MiniCssExtractPlugin.loader,
{
loader: "css-loader",
},
{
loader: "sass-loader",
options: {
sourceMap: true,
},
},
],
};
appConfig.plugins = [
...appConfig.plugins,
new MiniCssExtractPlugin({
filename: "[name].css",
chunkFilename: dev ? "[id].css" : "[id].[hash].css",
}),
];
appConfig.module.rules = [...config.module.rules, sassRules];
}
if (target === "node" && !dev) {
const serverEntry = path.resolve(__dirname, "src", "server");
appConfig.entry[0] = serverEntry;
}
if (target == "web" && !dev) {
const webEntry = path.resolve(__dirname, "src", "web", "client");
appConfig.entry.client = webEntry;
appConfig.optimization = {
splitChunks: {
cacheGroups: {
vendor: {
test: /[\\/]node_modules[\\/](react|react-dom|react-router-dom)[\\/]/,
name: "vendor",
chunks: "initial",
},
},
},
};
// appConfig.plugins = [...appConfig.plugins, new BundleAnalyzerPlugin(), new Visualizer()];
}
if (target === "node" && dev) {
const serverEntry = path.resolve(__dirname, "src", "server");
appConfig.entry[2] = serverEntry;
}
if (target == "web" && dev) {
const webEntry = path.resolve(__dirname, "src", "web", "client");
appConfig.entry.client[1] = webEntry;
}
return appConfig;
},
};