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
| import path from 'path';
| import { fileURLToPath } from 'url';
| import HtmlWebpackPlugin from 'html-webpack-plugin';
|
| const __dirname = path.dirname(fileURLToPath(import.meta.url));
| const isProduction = process.env.NODE_ENV === 'production';
|
| export default {
| mode: isProduction ? 'production' : 'development',
| entry: './src/index.ts',
| devtool: isProduction ? false : 'inline-source-map',
| experiments: {
| topLevelAwait: true,
| },
| module: {
| rules: [
| {
| test: /\.ts$/,
| use: 'ts-loader',
| exclude: /node_modules/,
| },
| {
| test: /\.css$/i,
| resourceQuery: { not: [/raw/] },
| use: ['style-loader', 'css-loader'],
| },
| {
| // Import mit ?raw liefert den CSS-Quelltext als String (zum Umschalten
| // der Theme-Defines zur Laufzeit).
| resourceQuery: /raw/,
| type: 'asset/source',
| },
| {
| test: /\.(woff|woff2|ttf|eot|svg|png|jpg|gif|ico)$/i,
| type: 'asset',
| },
| ],
| },
| resolve: {
| extensions: ['.ts', '.js'],
| },
| plugins: [
| new HtmlWebpackPlugin({
| template: 'src/index.html',
| }),
| ],
| devServer: {
| host: '0.0.0.0',
| port: 5000,
| open: false,
| proxy: [{ context: ['/api'], target: 'http://localhost:3000' }],
| },
| output: {
| path: path.resolve(__dirname, 'dist'),
| filename: 'index.[contenthash].js',
| clean: true,
| },
| stats: {
| errorDetails: true,
| },
| };
|
|