-
Notifications
You must be signed in to change notification settings - Fork 160
/
webpack.config.js
91 lines (86 loc) · 1.93 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
const path = require("path");
const fs = require("fs");
const TerserPlugin = require("terser-webpack-plugin");
function generateConfig(baseDir, baseConfig) {
return fs
.readdirSync(baseDir, { withFileTypes: true })
.filter((dirent) => dirent.isDirectory())
.map((dirent) => path.join(baseDir, dirent.name))
.filter((dirPath) => fs.existsSync(path.join(dirPath, "package.json")))
.reduce((acc, dirPath) => {
acc.push({
...baseConfig,
entry: `${path.resolve(dirPath, "index.ts")}`,
output: {
filename: "bundle.js",
libraryTarget: "commonjs",
path: path.resolve(dirPath),
},
});
return acc;
}, []);
}
const baseConfig = {
mode: "production",
target: "node",
node: {
__dirname: false,
},
resolve: {
extensions: [".ts", ".js"],
},
module: {
rules: [
{
test: /\.ts$/,
loader: "ts-loader",
exclude: /node_modules/,
},
],
},
optimization: {
minimizer: [
new TerserPlugin({
parallel: true,
extractComments: true,
}),
],
},
stats: {
errorDetails: true,
},
};
const lambdaEdgeBaseConfig = {
...baseConfig,
module: {
rules: [
...baseConfig.module.rules,
{
test: /\.html$/i,
loader: "html-loader",
options: {
minimize: true,
},
},
],
},
performance: {
hints: "error",
maxAssetSize: 1048576, // Max size of deployment bundle in Lambda@Edge Viewer Request
maxEntrypointSize: 1048576, // Max size of deployment bundle in Lambda@Edge Viewer Request
},
};
const customResourceBaseConfig = {
...baseConfig,
ignoreWarnings: [/original-fs/],
};
module.exports = [
...generateConfig(
path.resolve(__dirname, "src/lambda-edge"),
lambdaEdgeBaseConfig
),
...generateConfig(
path.resolve(__dirname, "src/cfn-custom-resources"),
customResourceBaseConfig
),
];