1 require('./check-versions')()
3 var config
= require('../config')
4 if (!process
.env
.NODE_ENV
) {
5 process
.env
.NODE_ENV
= JSON
.parse(config
.dev
.env
.NODE_ENV
)
8 var opn
= require('opn')
9 var path
= require('path')
10 var express
= require('express')
11 var webpack
= require('webpack')
12 var proxyMiddleware
= require('http-proxy-middleware')
13 var webpackConfig
= require('./webpack.dev.conf')
15 // default port where dev server listens for incoming traffic
16 var port
= process
.env
.PORT
|| config
.dev
.port
17 // automatically open browser, if not set will be false
18 var autoOpenBrowser
= !!config
.dev
.autoOpenBrowser
19 // Define HTTP proxies to your custom API backend
20 // https://github.com/chimurai/http-proxy-middleware
21 var proxyTable
= config
.dev
.proxyTable
24 var compiler
= webpack(webpackConfig
)
26 var devMiddleware
= require('webpack-dev-middleware')(compiler
, {
27 publicPath
: webpackConfig
.output
.publicPath
,
31 var hotMiddleware
= require('webpack-hot-middleware')(compiler
, {
34 // force page reload when html-webpack-plugin template changes
35 compiler
.plugin('compilation', function (compilation
) {
36 compilation
.plugin('html-webpack-plugin-after-emit', function (data
, cb
) {
37 hotMiddleware
.publish({ action
: 'reload' })
43 Object
.keys(proxyTable
).forEach(function (context
) {
44 var options
= proxyTable
[context
]
45 if (typeof options
=== 'string') {
46 options
= { target
: options
}
48 app
.use(proxyMiddleware(options
.filter
|| context
, options
))
51 // handle fallback for HTML5 history API
52 app
.use(require('connect-history-api-fallback')())
54 // serve webpack bundle output
55 app
.use(devMiddleware
)
57 // enable hot-reload and state-preserving
58 // compilation error display
59 app
.use(hotMiddleware
)
61 // serve pure static assets
62 var staticPath
= path
.posix
.join(config
.dev
.assetsPublicPath
, config
.dev
.assetsSubDirectory
)
63 app
.use(staticPath
, express
.static('./static'))
65 var uri
= 'http://localhost:' + port
68 var readyPromise
= new Promise(resolve
=> {
72 console
.log('> Starting dev server...')
73 devMiddleware
.waitUntilValid(() => {
74 console
.log('> Listening at ' + uri
+ '\n')
75 // when env is testing, don't need open it
76 if (autoOpenBrowser
&& process
.env
.NODE_ENV
!== 'testing') {
82 var server
= app
.listen(port
)