@@ -68,147 +68,161 @@ var argv = optimist.argv;
68
68
var wpOpt = require ( "webpack/bin/convert-argv" ) ( optimist , argv , {
69
69
outputFilename : "/bundle.js"
70
70
} ) ;
71
- var firstWpOpt = Array . isArray ( wpOpt ) ? wpOpt [ 0 ] : wpOpt ;
72
71
73
- var options = wpOpt . devServer || firstWpOpt . devServer || { } ;
72
+ function processOptions ( wpOpt ) {
73
+ //process Promise
74
+ if ( typeof wpOpt . then === "function" ) {
75
+ wpOpt . then ( processOptions ) . catch ( function ( err ) {
76
+ console . error ( err . stack || err ) ;
77
+ process . exit ( ) ; // eslint-disable-line
78
+ } ) ;
79
+ return ;
80
+ }
74
81
75
- if ( argv . host !== "localhost" || ! options . host )
76
- options . host = argv . host ;
82
+ var firstWpOpt = Array . isArray ( wpOpt ) ? wpOpt [ 0 ] : wpOpt ;
77
83
78
- if ( argv . public )
79
- options . public = argv . public ;
84
+ var options = wpOpt . devServer || firstWpOpt . devServer || { } ;
80
85
81
- if ( argv . port !== 8080 || ! options . port )
82
- options . port = argv . port ;
86
+ if ( argv . host !== "localhost" || ! options . host )
87
+ options . host = argv . host ;
83
88
84
- if ( ! options . publicPath ) {
85
- options . publicPath = firstWpOpt . output && firstWpOpt . output . publicPath || "" ;
86
- if ( ! / ^ ( h t t p s ? : ) ? \/ \/ / . test ( options . publicPath ) && options . publicPath [ 0 ] !== "/" )
87
- options . publicPath = "/" + options . publicPath ;
88
- }
89
+ if ( argv . public )
90
+ options . public = argv . public ;
89
91
90
- if ( ! options . outputPath )
91
- options . outputPath = "/" ;
92
- if ( ! options . filename )
93
- options . filename = firstWpOpt . output && firstWpOpt . output . filename ;
94
- [ ] . concat ( wpOpt ) . forEach ( function ( wpOpt ) {
95
- wpOpt . output . path = "/" ;
96
- } ) ;
92
+ if ( argv . port !== 8080 || ! options . port )
93
+ options . port = argv . port ;
97
94
98
- if ( ! options . watchOptions )
99
- options . watchOptions = firstWpOpt . watchOptions ;
95
+ if ( ! options . publicPath ) {
96
+ options . publicPath = firstWpOpt . output && firstWpOpt . output . publicPath || "" ;
97
+ if ( ! / ^ ( h t t p s ? : ) ? \/ \/ / . test ( options . publicPath ) && options . publicPath [ 0 ] !== "/" )
98
+ options . publicPath = "/" + options . publicPath ;
99
+ }
100
100
101
- if ( argv [ "stdin" ] ) {
102
- process . stdin . on ( 'end' , function ( ) {
103
- process . exit ( 0 ) ; // eslint-disable-line no-process-exit
101
+ if ( ! options . outputPath )
102
+ options . outputPath = "/" ;
103
+ if ( ! options . filename )
104
+ options . filename = firstWpOpt . output && firstWpOpt . output . filename ;
105
+ [ ] . concat ( wpOpt ) . forEach ( function ( wpOpt ) {
106
+ wpOpt . output . path = "/" ;
104
107
} ) ;
105
- process . stdin . resume ( ) ;
106
- }
107
108
108
- if ( ! options . watchDelay && ! options . watchOptions ) // TODO remove in next major version
109
- options . watchDelay = firstWpOpt . watchDelay ;
110
-
111
- if ( ! options . hot )
112
- options . hot = argv [ "hot" ] ;
113
-
114
- if ( argv [ "content-base" ] ) {
115
- options . contentBase = argv [ "content-base" ] ;
116
- if ( / ^ [ 0 - 9 ] $ / . test ( options . contentBase ) )
117
- options . contentBase = + options . contentBase ;
118
- else if ( ! / ^ ( h t t p s ? : ) ? \/ \/ / . test ( options . contentBase ) )
119
- options . contentBase = path . resolve ( options . contentBase ) ;
120
- } else if ( argv [ "content-base-target" ] ) {
121
- options . contentBase = {
122
- target : argv [ "content-base-target" ]
123
- } ;
124
- } else if ( ! options . contentBase ) {
125
- options . contentBase = process . cwd ( ) ;
126
- }
109
+ if ( ! options . watchOptions )
110
+ options . watchOptions = firstWpOpt . watchOptions ;
127
111
128
- if ( ! options . stats ) {
129
- options . stats = {
130
- cached : false ,
131
- cachedAssets : false
132
- } ;
133
- }
112
+ if ( argv [ "stdin" ] ) {
113
+ process . stdin . on ( 'end' , function ( ) {
114
+ process . exit ( 0 ) ; // eslint-disable-line no-process-exit
115
+ } ) ;
116
+ process . stdin . resume ( ) ;
117
+ }
134
118
135
- if ( typeof options . stats === "object" && typeof options . stats . colors === "undefined" )
136
- options . stats . colors = require ( "supports-color" ) ;
119
+ if ( ! options . watchDelay && ! options . watchOptions ) // TODO remove in next major version
120
+ options . watchDelay = firstWpOpt . watchDelay ;
121
+
122
+ if ( ! options . hot )
123
+ options . hot = argv [ "hot" ] ;
124
+
125
+ if ( argv [ "content-base" ] ) {
126
+ options . contentBase = argv [ "content-base" ] ;
127
+ if ( / ^ [ 0 - 9 ] $ / . test ( options . contentBase ) )
128
+ options . contentBase = + options . contentBase ;
129
+ else if ( ! / ^ ( h t t p s ? : ) ? \/ \/ / . test ( options . contentBase ) )
130
+ options . contentBase = path . resolve ( options . contentBase ) ;
131
+ } else if ( argv [ "content-base-target" ] ) {
132
+ options . contentBase = {
133
+ target : argv [ "content-base-target" ]
134
+ } ;
135
+ } else if ( ! options . contentBase ) {
136
+ options . contentBase = process . cwd ( ) ;
137
+ }
138
+
139
+ if ( ! options . stats ) {
140
+ options . stats = {
141
+ cached : false ,
142
+ cachedAssets : false
143
+ } ;
144
+ }
137
145
138
- if ( argv [ "lazy" ] )
139
- options . lazy = true ;
146
+ if ( typeof options . stats === "object" && typeof options . stats . colors === "undefined" )
147
+ options . stats . colors = require ( "supports-color" ) ;
140
148
141
- if ( ! argv [ "info " ] )
142
- options . noInfo = true ;
149
+ if ( argv [ "lazy " ] )
150
+ options . lazy = true ;
143
151
144
- if ( argv [ "quiet " ] )
145
- options . quiet = true ;
152
+ if ( ! argv [ "info " ] )
153
+ options . noInfo = true ;
146
154
147
- if ( argv [ "https " ] )
148
- options . https = true ;
155
+ if ( argv [ "quiet " ] )
156
+ options . quiet = true ;
149
157
150
- if ( argv [ "cert " ] )
151
- options . cert = fs . readFileSync ( path . resolve ( argv [ "cert" ] ) ) ;
158
+ if ( argv [ "https " ] )
159
+ options . https = true ;
152
160
153
- if ( argv [ "key " ] )
154
- options . key = fs . readFileSync ( path . resolve ( argv [ "key " ] ) ) ;
161
+ if ( argv [ "cert " ] )
162
+ options . cert = fs . readFileSync ( path . resolve ( argv [ "cert " ] ) ) ;
155
163
156
- if ( argv [ "cacert " ] )
157
- options . ca = fs . readFileSync ( path . resolve ( argv [ "cacert " ] ) ) ;
164
+ if ( argv [ "key " ] )
165
+ options . key = fs . readFileSync ( path . resolve ( argv [ "key " ] ) ) ;
158
166
159
- if ( argv [ "pfx " ] )
160
- options . pfx = fs . readFileSync ( path . resolve ( argv [ "pfx " ] ) ) ;
167
+ if ( argv [ "cacert " ] )
168
+ options . ca = fs . readFileSync ( path . resolve ( argv [ "cacert " ] ) ) ;
161
169
162
- if ( argv [ "pfx-passphrase " ] )
163
- options . pfxPassphrase = argv [ "pfx-passphrase" ] ;
170
+ if ( argv [ "pfx" ] )
171
+ options . pfx = fs . readFileSync ( path . resolve ( argv [ "pfx" ] ) ) ;
164
172
165
- if ( argv [ "inline " ] )
166
- options . inline = true ;
173
+ if ( argv [ "pfx-passphrase " ] )
174
+ options . pfxPassphrase = argv [ "pfx-passphrase" ] ;
167
175
168
- if ( argv [ "history-api-fallback " ] )
169
- options . historyApiFallback = true ;
176
+ if ( argv [ "inline " ] )
177
+ options . inline = true ;
170
178
171
- if ( argv [ "client-log-level " ] )
172
- options . clientLogLevel = argv [ "client-log-level" ] ;
179
+ if ( argv [ "history-api-fallback " ] )
180
+ options . historyApiFallback = true ;
173
181
174
- if ( argv [ "compress " ] )
175
- options . compress = true ;
182
+ if ( argv [ "client-log-level " ] )
183
+ options . clientLogLevel = argv [ "client-log-level" ] ;
176
184
177
- if ( argv [ "open " ] )
178
- options . open = true ;
185
+ if ( argv [ "compress " ] )
186
+ options . compress = true ;
179
187
180
- var protocol = options . https ? "https" : "http" ;
188
+ if ( argv [ "open" ] )
189
+ options . open = true ;
181
190
182
- if ( options . inline ) {
183
- var devClient = [ require . resolve ( "../client/" ) + "?" + protocol + "://" + ( options . public || ( options . host + ":" + options . port ) ) ] ;
191
+ var protocol = options . https ? "https" : "http" ;
184
192
185
- if ( options . hot )
186
- devClient . push ( "webpack/hot/dev-server" ) ;
187
- [ ] . concat ( wpOpt ) . forEach ( function ( wpOpt ) {
188
- if ( typeof wpOpt . entry === "object" && ! Array . isArray ( wpOpt . entry ) ) {
189
- Object . keys ( wpOpt . entry ) . forEach ( function ( key ) {
190
- wpOpt . entry [ key ] = devClient . concat ( wpOpt . entry [ key ] ) ;
191
- } ) ;
192
- } else {
193
- wpOpt . entry = devClient . concat ( wpOpt . entry ) ;
194
- }
193
+ if ( options . inline ) {
194
+ var devClient = [ require . resolve ( "../client/" ) + "?" + protocol + "://" + ( options . public || ( options . host + ":" + options . port ) ) ] ;
195
+
196
+ if ( options . hot )
197
+ devClient . push ( "webpack/hot/dev-server" ) ;
198
+ [ ] . concat ( wpOpt ) . forEach ( function ( wpOpt ) {
199
+ if ( typeof wpOpt . entry === "object" && ! Array . isArray ( wpOpt . entry ) ) {
200
+ Object . keys ( wpOpt . entry ) . forEach ( function ( key ) {
201
+ wpOpt . entry [ key ] = devClient . concat ( wpOpt . entry [ key ] ) ;
202
+ } ) ;
203
+ } else {
204
+ wpOpt . entry = devClient . concat ( wpOpt . entry ) ;
205
+ }
206
+ } ) ;
207
+ }
208
+
209
+ new Server ( webpack ( wpOpt ) , options ) . listen ( options . port , options . host , function ( err ) {
210
+ var uri = protocol + "://" + options . host + ":" + options . port + "/" ;
211
+ if ( ! options . inline )
212
+ uri += "webpack-dev-server/" ;
213
+
214
+ if ( err ) throw err ;
215
+ console . log ( " " + uri ) ;
216
+ console . log ( "webpack result is served from " + options . publicPath ) ;
217
+ if ( typeof options . contentBase === "object" )
218
+ console . log ( "requests are proxied to " + options . contentBase . target ) ;
219
+ else
220
+ console . log ( "content is served from " + options . contentBase ) ;
221
+ if ( options . historyApiFallback )
222
+ console . log ( "404s will fallback to %s" , options . historyApiFallback . index || "/index.html" ) ;
223
+ if ( options . open )
224
+ open ( uri ) ;
195
225
} ) ;
196
226
}
197
227
198
- new Server ( webpack ( wpOpt ) , options ) . listen ( options . port , options . host , function ( err ) {
199
- var uri = protocol + "://" + options . host + ":" + options . port + "/" ;
200
- if ( ! options . inline )
201
- uri += "webpack-dev-server/" ;
202
-
203
- if ( err ) throw err ;
204
- console . log ( " " + uri ) ;
205
- console . log ( "webpack result is served from " + options . publicPath ) ;
206
- if ( typeof options . contentBase === "object" )
207
- console . log ( "requests are proxied to " + options . contentBase . target ) ;
208
- else
209
- console . log ( "content is served from " + options . contentBase ) ;
210
- if ( options . historyApiFallback )
211
- console . log ( "404s will fallback to %s" , options . historyApiFallback . index || "/index.html" ) ;
212
- if ( options . open )
213
- open ( uri ) ;
214
- } ) ;
228
+ processOptions ( wpOpt ) ;
0 commit comments