forked from lslezak/agama-integration-test-webpack
-
Notifications
You must be signed in to change notification settings - Fork 5
/
webpack.config.cjs
72 lines (70 loc) · 1.88 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
const path = require("path");
const fs = require("fs");
const webpack = require("webpack");
// process all ./src/test_*.ts files
const entry = {}
fs.readdirSync("./src").filter(f => f.startsWith("test_") && f.endsWith(".ts")).forEach(
(f) => { entry[path.basename(f, ".ts")] = "./src/" + f }
);
module.exports = {
target: "node",
entry,
module: {
rules: [
{
test: /\.ts$/,
use: "ts-loader",
exclude: /node_modules/,
},
],
},
resolve: {
extensions: [".ts", ".js"],
},
output: {
filename: "[name].js",
path: path.resolve(__dirname, "dist"),
clean: true
},
devtool: "source-map",
optimization: {
splitChunks: {
cacheGroups: {
vendor: {
test: /[\\/]node_modules[\\/]/,
name: "vendor",
chunks: "all",
},
},
},
},
watchOptions: {
// wait a little bit when saving multiple files
aggregateTimeout: 100,
ignored: /node_modules/,
},
plugins: [
// ignore the webpack warnings about the dynamic imports in yargs module,
// it is used in the browser download code in puppeteer which is never used
// by the integration tests as we use the system browser
new webpack.ContextReplacementPlugin(
/\/(yargs|yargs-parser)\//,
(data) => {
data.dependencies.forEach((d) => delete d.critical);
return data;
},
),
// prepend a hashbang at the beginning of the generated file
new webpack.BannerPlugin({ banner: "#! /usr/bin/env node", raw: true, test: /^test_.*\.js$/ }),
// make the test JS files executable
function () {
this.hooks.done.tap("Change permissions", (data) => {
Object.keys(data.compilation.assets).forEach((file) => {
if (file.match(/^test_.*\.js$/)) {
fs.chmodSync(`${__dirname}/dist/${file}`, 0o755);
}
});
});
},
],
};