@@ -11,48 +11,22 @@ module.exports = (env) => {
11
11
const apiHost = env . apiHost || 'localhost' ;
12
12
const apiPort = env . apiPort || '8080' ;
13
13
const outputDir = 'target/webapp' ;
14
- return {
14
+ const baseConfig = {
15
15
entry : {
16
- 'index' : './index.jsx' ,
17
- 'query' : './query.jsx' ,
18
- 'plan' : './plan.jsx' ,
19
- 'query_viewer' : { import : './query_viewer.jsx' , filename : path . join ( 'dev' , '[name].js' ) } ,
20
- 'embedded_plan' : './embedded_plan.jsx' ,
21
- 'stage' : './stage.jsx' ,
22
- 'worker' : './worker.jsx' ,
23
- 'timeline' : './timeline.jsx' ,
24
- 'res_groups' : './res_groups.jsx' ,
25
- 'sql_client' : './sql_client.jsx' ,
26
16
'css_loader' : path . join ( __dirname , 'static' , 'vendor' , 'css-loaders' , 'loader.css' ) ,
27
17
'css_presto' : path . join ( __dirname , 'static' , 'assets' , 'presto.css' ) ,
28
18
} ,
29
19
externals : {
30
20
// substitutes `require('vis-timeline/standalone')` to `global.vis`
31
21
'vis-timeline/standalone' : 'vis' ,
32
22
} ,
33
- plugins : [
34
- new CopyPlugin ( {
35
- patterns : [
36
- { from : "static" , to : path . join ( __dirname , ".." , outputDir ) } ,
37
- ]
38
- } ) ,
39
- new HtmlWebpackPlugin ( {
40
- inject : 'body' ,
41
- filename : path . join ( __dirname , '..' , outputDir , 'dev' , 'query_viewer_spa.html' ) ,
42
- template : 'templates/query_viewer.html' ,
43
- chunks : [
44
- 'query_viewer' ,
45
- 'css_loader' ,
46
- 'css_presto' ,
47
- ]
48
- } ) ,
49
- new HtmlInlineScriptPlugin ( {
50
- htmlMatchPattern : [ / q u e r y _ v i e w e r _ s p a .h t m l $ / ] ,
51
- assetPreservePattern : [
52
- / .* .j s $ / ,
53
- ]
54
- } ) ,
55
- ] ,
23
+ plugins : [
24
+ new CopyPlugin ( {
25
+ patterns : [
26
+ { from : "static" , to : path . join ( __dirname , ".." , outputDir ) } ,
27
+ ]
28
+ } ) ,
29
+ ] ,
56
30
mode,
57
31
module : {
58
32
rules : [
@@ -97,6 +71,25 @@ module.exports = (env) => {
97
71
extractComments : false ,
98
72
} ) ,
99
73
'...' ] ,
74
+ } ,
75
+ } ;
76
+
77
+ const mainConfig = {
78
+ ...baseConfig ,
79
+ entry : {
80
+ 'index' : './index.jsx' ,
81
+ 'query' : './query.jsx' ,
82
+ 'plan' : './plan.jsx' ,
83
+ 'embedded_plan' : './embedded_plan.jsx' ,
84
+ 'stage' : './stage.jsx' ,
85
+ 'worker' : './worker.jsx' ,
86
+ 'timeline' : './timeline.jsx' ,
87
+ 'res_groups' : './res_groups.jsx' ,
88
+ 'sql_client' : './sql_client.jsx' ,
89
+ ...baseConfig . entry ,
90
+ } ,
91
+ optimization : {
92
+ ...baseConfig . optimization ,
100
93
splitChunks : {
101
94
chunks : 'async' ,
102
95
maxSize : 244000 ,
@@ -107,6 +100,7 @@ module.exports = (env) => {
107
100
test : / [ \\ / ] n o d e _ m o d u l e s [ \\ / ] / ,
108
101
priority : - 10 ,
109
102
reuseExistingChunk : true ,
103
+ filename : '[name].vendor.js' ,
110
104
} ,
111
105
default : {
112
106
minChunks : 2 ,
@@ -130,4 +124,37 @@ module.exports = (env) => {
130
124
] ,
131
125
} ,
132
126
} ;
127
+
128
+ const spaConfig = {
129
+ ...baseConfig ,
130
+ plugins : [
131
+ ...baseConfig . plugins ,
132
+ new HtmlWebpackPlugin ( {
133
+ inject : 'body' ,
134
+ filename : path . join ( 'dev' , 'query_viewer_spa.html' ) ,
135
+ template : 'templates/query_viewer.html' ,
136
+ chunks : [
137
+ 'query_viewer' ,
138
+ 'bootstrap_css' ,
139
+ 'css_loader' ,
140
+ 'css_presto' ,
141
+ ]
142
+ } ) ,
143
+ new HtmlInlineScriptPlugin ( {
144
+ htmlMatchPattern : [ / q u e r y _ v i e w e r _ s p a .h t m l $ / ] ,
145
+ assetPreservePattern : [
146
+ / .* .j s $ / ,
147
+ ]
148
+ } ) ,
149
+ ] ,
150
+ entry : {
151
+ 'query_viewer' : { import : './query_viewer.jsx' , filename : path . join ( 'dev' , '[name].js' ) } ,
152
+ ...baseConfig . entry ,
153
+ } ,
154
+ optimization : {
155
+ ...baseConfig . optimization ,
156
+ splitChunks : false ,
157
+ }
158
+ } ;
159
+ return [ mainConfig , spaConfig ]
133
160
} ;
0 commit comments