Merge the latest version of Speedometer 2.0 to browserbench.org against at r222534.
[WebKit-https.git] / Websites / browserbench.org / Speedometer2.0 / resources / todomvc / architecture-examples / vuejs-cli / build / dev-server.js
1 require('./check-versions')()
2
3 var config = require('../config')
4 if (!process.env.NODE_ENV) {
5   process.env.NODE_ENV = JSON.parse(config.dev.env.NODE_ENV)
6 }
7
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 = (process.env.NODE_ENV === 'testing' || process.env.NODE_ENV === 'production')
14   ? require('./webpack.prod.conf')
15   : require('./webpack.dev.conf')
16
17 // default port where dev server listens for incoming traffic
18 var port = process.env.PORT || config.dev.port
19 // automatically open browser, if not set will be false
20 var autoOpenBrowser = !!config.dev.autoOpenBrowser
21 // Define HTTP proxies to your custom API backend
22 // https://github.com/chimurai/http-proxy-middleware
23 var proxyTable = config.dev.proxyTable
24
25 var app = express()
26 var compiler = webpack(webpackConfig)
27
28 var devMiddleware = require('webpack-dev-middleware')(compiler, {
29   publicPath: webpackConfig.output.publicPath,
30   quiet: true
31 })
32
33 var hotMiddleware = require('webpack-hot-middleware')(compiler, {
34   log: false,
35   heartbeat: 2000
36 })
37 // force page reload when html-webpack-plugin template changes
38 compiler.plugin('compilation', function (compilation) {
39   compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) {
40     hotMiddleware.publish({ action: 'reload' })
41     cb()
42   })
43 })
44
45 // proxy api requests
46 Object.keys(proxyTable).forEach(function (context) {
47   var options = proxyTable[context]
48   if (typeof options === 'string') {
49     options = { target: options }
50   }
51   app.use(proxyMiddleware(options.filter || context, options))
52 })
53
54 // handle fallback for HTML5 history API
55 app.use(require('connect-history-api-fallback')())
56
57 // serve webpack bundle output
58 app.use(devMiddleware)
59
60 // enable hot-reload and state-preserving
61 // compilation error display
62 app.use(hotMiddleware)
63
64 // serve pure static assets
65 var staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory)
66 app.use(staticPath, express.static('./static'))
67
68 var uri = 'http://localhost:' + port
69
70 var _resolve
71 var readyPromise = new Promise(resolve => {
72   _resolve = resolve
73 })
74
75 console.log('> Starting dev server...')
76 devMiddleware.waitUntilValid(() => {
77   console.log('> Listening at ' + uri + '\n')
78   // when env is testing, don't need open it
79   if (autoOpenBrowser && process.env.NODE_ENV !== 'testing') {
80     opn(uri)
81   }
82   _resolve()
83 })
84
85 var server = app.listen(port)
86
87 module.exports = {
88   ready: readyPromise,
89   close: () => {
90     server.close()
91   }
92 }