-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathwebpack.config.js
91 lines (89 loc) · 2.48 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 glob = require('glob')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const CopyPlugin = require('copy-webpack-plugin')
const generateHtmlPlugins = () => glob.sync('./src/**/index.html').map((item) => new HtmlWebpackPlugin({
template: item,
filename: `./${item.replace('/src', '').replace('./', '')}`,
inject: false,
templateParameters: {
path: `.${item.replace('/src', '').replace('.html', '.js')}`,
pathCSS: `.${item.replace('/src', '').replace('index.html', 'style.css')}`,
},
}))
module.exports = {
entry: glob.sync('./src/**/index.ts').reduce((acc, filePath) => {
const entry = filePath.replace('/index.ts', '').replace('/src', '')
acc[entry] = filePath
return acc
}, {}),
output: {
filename: './[name]/index.js',
path: path.resolve(__dirname, 'demo'),
assetModuleFilename: 'images/[hash][ext][query]',
},
devtool: 'source-map',
module: {
rules: [
{
test: /\.(js|mjs|jsx|ts|tsx)$/,
exclude: /(node_modules|bower_components)/,
use: [
{
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env', '@babel/preset-typescript'],
},
},
],
},
{
test: /\.css$/,
use: [
{
loader: 'style-loader', // creates style nodes from JS strings
},
{
loader: 'css-loader', // translates CSS into CommonJS
},
],
},
{
test: /\.(png|jpg)$/,
type: 'asset/resource',
},
],
},
resolve: {
extensions: ['.tsx', '.ts', '.js', '.jsx', 'mjs'],
},
plugins: [
...generateHtmlPlugins(),
new CopyPlugin({
patterns: [
{
from: 'src/assets/**/*',
to({ absoluteFilename }) {
const pathAndName = absoluteFilename.split('src/')[1]
return pathAndName
},
},
{
from: 'src/**/*.css', // Match all CSS files in the src directory
to({ context, absoluteFilename }) {
// Calculate the relative path of the file within the src directory
const relativePath = path.relative(context, absoluteFilename)
// Determine the destination path based on the relative path
return relativePath.split('src/')[1]
},
},
],
}),
],
mode: 'development',
devServer: {
contentBase: './demo',
open: true,
host: '0.0.0.0',
},
}