1+ 'use strict'
12require ( './check-versions' ) ( )
23
3- var config = require ( '../config' )
4+ const config = require ( '../config' )
45if ( ! process . env . NODE_ENV ) {
56 process . env . NODE_ENV = JSON . parse ( config . dev . env . NODE_ENV )
67}
78
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' )
9+ const opn = require ( 'opn' )
10+ const path = require ( 'path' )
11+ const express = require ( 'express' )
12+ const webpack = require ( 'webpack' )
13+ const proxyMiddleware = require ( 'http-proxy-middleware' )
14+ const webpackConfig = require ( './webpack.dev.conf' )
1415
1516// default port where dev server listens for incoming traffic
16- var port = process . env . PORT || config . dev . port
17+ const port = process . env . PORT || config . dev . port
1718// automatically open browser, if not set will be false
18- var autoOpenBrowser = ! ! config . dev . autoOpenBrowser
19+ const autoOpenBrowser = ! ! config . dev . autoOpenBrowser
1920// Define HTTP proxies to your custom API backend
2021// https://github.com/chimurai/http-proxy-middleware
21- var proxyTable = config . dev . proxyTable
22+ const proxyTable = config . dev . proxyTable
2223
23- var app = express ( )
24- var compiler = webpack ( webpackConfig )
24+ const app = express ( )
25+ const compiler = webpack ( webpackConfig )
2526
26- var devMiddleware = require ( 'webpack-dev-middleware' ) ( compiler , {
27+ const devMiddleware = require ( 'webpack-dev-middleware' ) ( compiler , {
2728 publicPath : webpackConfig . output . publicPath ,
2829 quiet : true
2930} )
3031
31- var hotMiddleware = require ( 'webpack-hot-middleware' ) ( compiler , {
32+ const hotMiddleware = require ( 'webpack-hot-middleware' ) ( compiler , {
3233 log : false ,
3334 heartbeat : 2000
3435} )
3536// force page reload when html-webpack-plugin template changes
36- compiler . plugin ( 'compilation' , function ( compilation ) {
37- compilation . plugin ( 'html-webpack-plugin-after-emit' , function ( data , cb ) {
38- hotMiddleware . publish ( { action : 'reload' } )
39- cb ( )
40- } )
41- } )
37+ // currently disabled until this is resolved:
38+ // https://github.com/jantimon/html-webpack-plugin/issues/680
39+ // compiler.plugin('compilation', function (compilation) {
40+ // compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) {
41+ // hotMiddleware.publish({ action: 'reload' })
42+ // cb()
43+ // })
44+ // })
45+
46+ // enable hot-reload and state-preserving
47+ // compilation error display
48+ app . use ( hotMiddleware )
4249
4350// proxy api requests
4451Object . keys ( proxyTable ) . forEach ( function ( context ) {
45- var options = proxyTable [ context ]
52+ let options = proxyTable [ context ]
4653 if ( typeof options === 'string' ) {
4754 options = { target : options }
4855 }
@@ -55,33 +62,41 @@ app.use(require('connect-history-api-fallback')())
5562// serve webpack bundle output
5663app . use ( devMiddleware )
5764
58- // enable hot-reload and state-preserving
59- // compilation error display
60- app . use ( hotMiddleware )
61-
6265// serve pure static assets
63- var staticPath = path . posix . join ( config . dev . assetsPublicPath , config . dev . assetsSubDirectory )
66+ const staticPath = path . posix . join ( config . dev . assetsPublicPath , config . dev . assetsSubDirectory )
6467app . use ( staticPath , express . static ( './static' ) )
6568
66- var uri = 'http://localhost:' + port
69+ const uri = 'http://localhost:' + port
6770
6871var _resolve
69- var readyPromise = new Promise ( resolve => {
72+ var _reject
73+ var readyPromise = new Promise ( ( resolve , reject ) => {
7074 _resolve = resolve
75+ _reject = reject
7176} )
7277
78+ var server
79+ var portfinder = require ( 'portfinder' )
80+ portfinder . basePort = port
81+
7382console . log ( '> Starting dev server...' )
7483devMiddleware . waitUntilValid ( ( ) => {
75- console . log ( '> Listening at ' + uri + '\n' )
76- // when env is testing, don't need open it
77- if ( autoOpenBrowser && process . env . NODE_ENV !== 'testing' ) {
78- opn ( uri )
79- }
80- _resolve ( )
84+ portfinder . getPort ( ( err , port ) => {
85+ if ( err ) {
86+ _reject ( err )
87+ }
88+ process . env . PORT = port
89+ var uri = 'http://localhost:' + port
90+ console . log ( '> Listening at ' + uri + '\n' )
91+ // when env is testing, don't need open it
92+ if ( autoOpenBrowser && process . env . NODE_ENV !== 'testing' ) {
93+ opn ( uri )
94+ }
95+ server = app . listen ( port )
96+ _resolve ( )
97+ } )
8198} )
8299
83- var server = app . listen ( port )
84-
85100module . exports = {
86101 ready : readyPromise ,
87102 close : ( ) => {
0 commit comments