-
Notifications
You must be signed in to change notification settings - Fork 0
/
webpack.config.js
160 lines (137 loc) · 3.92 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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = env => {
// Check environment
if (env.target == 'panel')
return createUI(env)
else
return createPlugin(env)
}
// Config for the plugin
function createPlugin(env) {
// Create config
let config = {
entry: './src/index.js',
// mode: 'development',
mode: 'production',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'plugin.js',
publicPath: 'auto',
library: {
name: 'module.exports',
type: 'assign',
export: 'default'
}
},
module: {
rules: []
},
plugins: []
}
// Add support for JS
config.module.rules.push({
test: /\.(js)$/,
exclude: /node_modules/,
use: {
loader: "babel-loader"
}
})
// Add support for require()'ing resource files. These files will be bundled into
// the plugin as a data URI. Generally you should use `this.paths.absolute()` to
// get a path to a resource in the resources/ folder instead.
config.module.rules.push({
test: /\.(png|svg|jpg|gif|woff|woff2|eot|ttf|otf|ico|mp3|mp4|wav|hdr|glb)$/,
use: [
{
loader: 'url-loader',
options: {
esModule: false,
limit: 100000000,
},
},
],
})
// Copy all files from the resources/ folder into the dist/ folder when building
const CopyPlugin = require("copy-webpack-plugin")
config.plugins.push(new CopyPlugin({
patterns: [
{ from: path.resolve(__dirname, 'resources'), to: "./" },
],
}))
// Add support for the dev server
config.devServer = {
static: {
directory: path.join(__dirname, 'resources'),
},
compress: true,
port: 9000,
hot: false,
headers: {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET, OPTIONS",
"Access-Control-Allow-Headers": "X-Requested-With, Content-Type, Authorization"
}
}
// Add dev server options
config.devtool = 'source-map'
// Done
return config
}
// Config for a React UI component
function createUI(env) {
// Create config
let config = {
plugins: [],
module: {
rules: []
}
}
// App entry point
config.entry = {
app: [`./src-panel/index.js`]
}
// Output location
config.output = {
filename: '[name].[contenthash].bundle.js',
path: path.resolve(__dirname, 'dist', 'ui-build'),
publicPath: 'auto'
}
// Add HTML page plugin
config.plugins.push(new HtmlWebpackPlugin({
template: path.resolve(__dirname, 'src-panel/index.ejs'),
}))
// Add support for JS and JSX
config.module.rules.push({
test: /\.(js|jsx)$/,
exclude: /node_modules/,
use: {
loader: "babel-loader"
}
})
// Add support for resource files
config.module.rules.push({
test: /\.(png|svg|jpg|gif|woff|woff2|eot|ttf|otf|ico|mp3|wav|hdr|glb|mp4|html|dds|env)$/,
use: [
{
loader: 'file-loader',
options: {
esModule: false // Required so that calling `require()` on a file actually works.
},
},
],
})
// Add support for CSS
config.module.rules.push({
test: /\.(css)$/,
use: [
{ loader: 'file-loader', options: { name: '[name].css' } },
{ loader: 'extract-loader' },
{ loader: 'css-loader', options: { importLoaders: 1 } },
],
})
// Add dev server options
config.devtool = 'source-map'
// Done
return config
}