-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwebpack.config.cjs
136 lines (130 loc) · 4.39 KB
/
webpack.config.cjs
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
// Webpack uses this to work with directories
const HtmlWebpackPlugin = require("html-webpack-plugin");
const CopyWebpackPlugin = require("copy-webpack-plugin");
const { CleanWebpackPlugin } = require("clean-webpack-plugin");
const path = require("path");
// This is the main configuration object.
// Here, you write different options and tell Webpack what to do
module.exports = {
// Path to your entry point. From this file Webpack will begin its work
entry: {
index: "./src/ecoFood3.01.js",
edit: "./src/edit/main.js",
},
// Path and filename of your result bundle.
// Webpack will bundle all JavaScript into this file
output: {
// eslint-disable-next-line no-undef
path: path.resolve(__dirname, "dist"),
filename: "js/[name].[chunkhash].js",
},
optimization: {
splitChunks: {
chunks: "all",
},
},
// Default mode for Webpack is production.
// Depending on mode Webpack will apply different things
// on the final bundle. For now, we don't need production's JavaScript
// minifying and other things, so let's set mode to development
mode: "development",
devServer: {
open: {
target: "index.html",
app: {
name: "chrome",
arguments: ["--incognito", "--new-window"],
},
},
},
devtool: "inline-source-map",
performance: {
hints: false,
maxEntrypointSize: 512000,
maxAssetSize: 512000,
},
resolve: {
extensions: [".tsx", ".ts", ".js"],
},
module: {
rules: [
{
test: /\.css$/i,
loader: "style-loader",
// Don't consider CSS imports dead code even if the
// containing package claims to have no side effects.
// Remove this when webpack adds a warning or an error for this.
// See https://github.com/webpack/webpack/issues/6571
sideEffects: true,
},
{
test: /\.css$/i,
loader: "css-loader",
// Don't consider CSS imports dead code even if the
// containing package claims to have no side effects.
// Remove this when webpack adds a warning or an error for this.
// See https://github.com/webpack/webpack/issues/6571
options: {
url: false,
},
sideEffects: true,
},
{
test: /\.?(js|ts|tsx|jsx)$/i,
exclude: /node_modules/,
use: {
loader: "babel-loader",
options: {
presets: ["@babel/preset-env", "@babel/preset-react", "@babel/preset-typescript"],
},
},
},
],
},
plugins: [
new HtmlWebpackPlugin({
template: "./src/pages/index.html",
chunks: ["index", "foodListController"],
filename: "index.html",
minify: {
removeComments: true,
collapseWhitespace: true,
removeRedundantAttributes: true,
useShortDoctype: true,
removeEmptyAttributes: true,
removeStyleLinkTypeAttributes: true,
keepClosingSlash: true,
minifyJS: true,
minifyCSS: true,
minifyURLs: true,
},
}),
new HtmlWebpackPlugin({
template: "./src/pages/edit/index.html",
filename: "edit/index.html",
chunks: ["edit", "foodListController"],
minify: {
removeComments: true,
collapseWhitespace: true,
removeRedundantAttributes: true,
useShortDoctype: true,
removeEmptyAttributes: true,
removeStyleLinkTypeAttributes: true,
keepClosingSlash: true,
minifyJS: true,
minifyCSS: true,
minifyURLs: true,
},
}),
new CopyWebpackPlugin({
patterns: [
{
from: "./src/public/",
to: "./public",
force: true,
},
],
}),
new CleanWebpackPlugin(),
],
};