-
Notifications
You must be signed in to change notification settings - Fork 125
/
webpack.config.js
123 lines (117 loc) · 3.31 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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
const fs = require("fs");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const mode = process.env.NODE_ENV || "production";
const devMode = mode === "development";
var entry = {
vendor: {
import: [
"jquery/dist/jquery",
"bootstrap/dist/js/bootstrap.bundle",
"bootstrap-autocomplete/dist/latest/bootstrap-autocomplete",
"imagesloaded/imagesloaded.pkgd",
"masonry-layout/dist/masonry.pkgd",
"mediaelement/build/mediaelement-and-player",
"@accessible360/accessible-slick/slick/slick",
"jquery-expander/jquery.expander",
"jquery-mousewheel/jquery.mousewheel",
"jquery-ui-dist/jquery-ui",
"jstree/dist/jstree",
"./vendor/yui/yahoo-dom-event/yahoo-dom-event",
"./vendor/yui/connection/connection",
"./vendor/yui/datasource/datasource",
"./vendor/yui/autocomplete/autocomplete",
],
filename: "js/[name].bundle.[contenthash].js",
},
};
// Create an entry and HtmlWebpackPlugin(s) for each AtoM plugin folder with
// "webpack.entry.js" and "templates/_layout_start_webpack.php" files.
var htmlPlugins = [];
fs.readdirSync(__dirname + "/plugins")
.filter(
(plugin) =>
fs.existsSync(__dirname + "/plugins/" + plugin + "/webpack.entry.js") &&
fs.existsSync(
__dirname +
"/plugins/" +
plugin +
"/templates/_layout_start_webpack.php"
)
)
.forEach((plugin) => {
entry[plugin] = "./plugins/" + plugin + "/webpack.entry.js";
// Layout start template for all plugins
templates = [
"./plugins/" + plugin + "/templates/_layout_start_webpack.php",
];
// Include error and unavailable templates for arDominionB5Plugin
if (plugin === "arDominionB5Plugin") {
templates.push(
"./config/unavailableB5_webpack.php",
"./config/error/errorB5_webpack.html.php"
);
}
templates.forEach((path) =>
htmlPlugins.push(
new HtmlWebpackPlugin({
template: path,
filename: "." + path.replace("_webpack", ""),
publicPath: "/dist",
chunks: ["vendor", plugin],
inject: false,
minify: false,
})
)
);
});
module.exports = {
mode: mode,
entry: entry,
output: {
path: __dirname + "/dist",
filename: "js/[name].bundle.[contenthash].js",
clean: true,
},
devtool: "source-map",
module: {
rules: [
{
test: require.resolve("jquery"),
loader: "expose-loader",
options: {
exposes: ["$", "jQuery"],
},
},
{
test: require.resolve("bootstrap/dist/js/bootstrap.bundle"),
loader: "expose-loader",
options: {
exposes: ["bootstrap"],
},
},
{
test: /\.(sa|sc|c)ss$/i,
use: [
MiniCssExtractPlugin.loader,
"css-loader",
"resolve-url-loader",
{ loader: "sass-loader", options: { sourceMap: true } },
],
},
{
mimetype: "image/svg+xml",
scheme: "data",
type: "asset/resource",
generator: {
filename: "icons/[hash].svg",
},
},
],
},
plugins: htmlPlugins.concat([
new MiniCssExtractPlugin({
filename: "css/[name].bundle.[contenthash].css",
}),
]),
};