-
Notifications
You must be signed in to change notification settings - Fork 3
/
webpack.common.js
144 lines (136 loc) · 2.82 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
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
137
138
139
140
141
142
143
144
const path = require("path"),
webpack = require("webpack"),
MiniCssExtractPlugin = require("mini-css-extract-plugin"),
HtmlWebpackPlugin = require("html-webpack-plugin"),
CopyWebpackPlugin = require("copy-webpack-plugin");
// Default entry
const entry = {
app: "~/loot",
},
// Default output
output = {
path: path.resolve(__dirname, "public"),
assetModuleFilename: "[name][ext]",
clean: true,
},
// Rule for *.ts processing
tsRule = {
test: /\.ts$/u,
loader: "ts-loader",
},
// Rule for *.css processing
cssRule = {
test: /\.css$/u,
use: [MiniCssExtractPlugin.loader, "css-loader"],
},
// Rule for font processing
fontRule = {
test: /\.(?:ttf|woff|woff2|eot|svg)$/u,
type: "asset/resource",
generator: {
filename: "fonts/[name][ext]",
},
},
// Rule for *.ico processing
iconRule = {
test: /\.ico$/u,
type: "asset/resource",
},
// Rule for *.html processing
htmlRule = {
test: /\.html$/u,
include: /views/u,
use: [
{
loader: "ngtemplate-loader",
options: {
// Strip path prefixes up to (and including) 'src/'
relativeTo: "src/",
},
},
{
loader: "html-loader",
options: {
sources: {
list: [
"...",
{
attribute: "typeahead-template-url",
type: "src",
},
],
},
esModule: false,
},
},
],
},
/*
* Exposes a global jQuery object (Bootstrap expects this global to exist)
* window.jQuery is needed to prevent Angular from using jqLite
*/
providejQuery = new webpack.ProvidePlugin({
$: "jquery",
jQuery: "jquery",
"window.jQuery": "jquery",
}),
// Creates index.html with the bundled resources
createIndexHtml = new HtmlWebpackPlugin(),
// Copies static resources to the build directory
copyStaticAssets = new CopyWebpackPlugin({
patterns: [
{
from: "*.html",
context: "./src",
globOptions: { ignore: ["index.html"] },
},
{ from: "robots.txt", context: "./src" },
],
}),
// Default config
config = {
mode: "development",
// Ensure that the context is the directory where the webpack.*.js config file is
context: path.resolve(__dirname),
// Default rules for all environments
module: {
rules: [tsRule, htmlRule],
},
// Default resolve paths
resolve: {
alias: {
"~": path.resolve(__dirname, "src"),
},
extensions: [".ts", "..."],
},
optimization: {
splitChunks: {
chunks: "all",
minSize: 0,
cacheGroups: {
defaultVendors: {
name: "vendor",
test: /[\\/]node_modules[\\/]/u,
},
},
},
runtimeChunk: "single",
},
// Abort on first error
bail: true,
};
function extractCss(options = undefined) {
return new MiniCssExtractPlugin(options);
}
module.exports = {
entry,
output,
cssRule,
fontRule,
iconRule,
providejQuery,
extractCss,
createIndexHtml,
copyStaticAssets,
config,
};