-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathwebpack.config.js
85 lines (73 loc) · 2.14 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
const path = require('path');
const TerserPlugin = require("terser-webpack-plugin");
const HtmlWebpackPlugin = require('html-webpack-plugin');
const basicConfig = {
entry: './src/ts/main.ts',
module: {
rules: [
{ test: /\.ts?$/, use: 'ts-loader', exclude: /node_modules/ },
{
test: /\.worker\.js$/,
loader: "worker-loader",
options: { inline: "no-fallback" }
},
{
test: /\.wasm$/,
type: `asset/resource`,
generator: { filename: '[name].wasm' }
},
],
},
resolve: {
extensions: ['.ts', '.d.ts', '...'],
fallback: { events: false, fs: false, module: false, url: false, crypto: false, path: false, worker_threads: false }
},
output: {
filename: 'frameflow.min.js',
library: {
name: 'frameflow',
type: 'umd',
export: 'default',
},
globalObject: 'this',
path: path.resolve(__dirname, 'dist'),
},
}
// for development
const devConfig = {
mode: 'development',
plugins: [
new HtmlWebpackPlugin({
title: 'FrameFlow dev',
template: 'examples/browser/index.html',
}),
],
devServer: {
static: path.join(__dirname, "examples"),
},
devtool: 'eval-cheap-module-source-map',
}
// for production
const prodConfig = {
mode: 'production',
optimization: {
minimize: true,
minimizer: [
new TerserPlugin()
],
}
}
module.exports = (env, argv) => {
const config = {...basicConfig}
const plugins = [...config.plugins??[]]
if (argv.mode === 'development') {
plugins.push(...devConfig.plugins??[])
Object.assign(config, devConfig)
}
else if (argv.mode === 'production') {
plugins.push(...prodConfig.plugins??[])
Object.assign(config, prodConfig)
}
else throw `specify env`
return {...config, plugins: plugins.length > 0 ? plugins : undefined}
}