/
webpack.config.js
116 lines (109 loc) · 2.26 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
const path = require('path');
const merge = require('webpack-merge').merge;
const nodeExternals = require('webpack-node-externals');
const StylesLoader = require('styles-loader');
const TerserPlugin = require('terser-webpack-plugin');
const stylesLoader = new StylesLoader({
extract: 'bundled.css'
});
const common = {
module: {
rules: [
{
test: /\.js$/,
exclude: /(node_modules)/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
}
]
}
};
const backend = {
entry: {
index:'./src/exact-math.js'
},
output: {
filename: 'exact-math.node.js',
path: path.resolve(__dirname, 'dist'),
library:'exactMath',
libraryTarget: 'commonjs2',
libraryExport:'default',
globalObject: 'this'
},
target:'node',
externals: [nodeExternals()]
};
const frontend = {
entry: {
index: './src/exact-math.js'
},
output: {
filename: 'exact-math.js',
path: path.resolve(__dirname, 'dist'),
library: 'exactMath',
libraryTarget: 'var',
libraryExport: 'default',
globalObject: 'this'
},
target: 'web'
};
const simulator = merge(stylesLoader, {
entry: {
index: './simulator/prod/index.js'
},
output: {
filename: 'bundled.js',
path: path.resolve(__dirname, 'simulator/dist'),
library: 'bundled',
libraryTarget: 'var',
libraryExport: 'default',
globalObject: 'this'
},
target: 'web'
});
const dev = {
mode: 'development',
watch: true,
stats: {
version: false,
colors: true,
warnings: false,
assets: true,
cached: false,
cachedAssets: false,
children: false,
chunks: false,
chunkModules: false,
chunkOrigins: false,
depth: false,
entrypoints: false,
errors: true,
errorDetails: true,
hash: false,
modules: false,
providedExports: false,
publicPath: false,
timings: true,
usedExports: false
}
};
const prod = {
mode: 'production',
watch: false,
stats: false,
optimization: {
minimizer: [new TerserPlugin()]
}
};
module.exports = (env) => {
const mode = env.prod ? prod : dev;
return [
merge(common, mode, backend),
merge(common, mode, frontend),
merge(common, mode, simulator)
];
};