You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.4 KiB
87 lines
2.4 KiB
process.env.NODE_ENV = 'development'
|
|
|
|
require('colors')
|
|
|
|
var
|
|
path = require('path'),
|
|
express = require('express'),
|
|
webpack = require('webpack'),
|
|
env = require('./env-utils'),
|
|
config = require('../config'),
|
|
opn = require('opn'),
|
|
proxyMiddleware = require('http-proxy-middleware'),
|
|
webpackConfig = require('./webpack.dev.conf'),
|
|
app = express(),
|
|
port = process.env.PORT || config.dev.port,
|
|
uri = 'http://localhost:' + port
|
|
|
|
console.log(' Starting dev server with "' + (process.argv[2] || env.platform.theme).bold + '" theme...')
|
|
console.log(' Will listen at ' + uri.bold)
|
|
if (config.dev.openBrowser) {
|
|
console.log(' Browser will open when build is ready.\n')
|
|
}
|
|
|
|
var compiler = webpack(webpackConfig)
|
|
|
|
// Define HTTP proxies to your custom API backend
|
|
// https://github.com/chimurai/http-proxy-middleware
|
|
var proxyTable = config.dev.proxyTable
|
|
|
|
var devMiddleware = require('webpack-dev-middleware')(compiler, {
|
|
publicPath: webpackConfig.output.publicPath,
|
|
quiet: true
|
|
})
|
|
|
|
var hotMiddleware = require('webpack-hot-middleware')(compiler, {
|
|
log: function () {}
|
|
})
|
|
|
|
// force page reload when html-webpack-plugin template changes
|
|
compiler.plugin('compilation', function (compilation) {
|
|
compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) {
|
|
hotMiddleware.publish({ action: 'reload' })
|
|
cb()
|
|
})
|
|
})
|
|
|
|
// proxy requests like API. See /config/index.js -> dev.proxyTable
|
|
// https://github.com/chimurai/http-proxy-middleware
|
|
Object.keys(proxyTable).forEach(function (context) {
|
|
var options = proxyTable[context]
|
|
if (typeof options === 'string') {
|
|
options = { target: options }
|
|
}
|
|
app.use(proxyMiddleware(context, options))
|
|
})
|
|
|
|
// handle fallback for HTML5 history API
|
|
app.use(require('connect-history-api-fallback')())
|
|
|
|
// serve webpack bundle output
|
|
app.use(devMiddleware)
|
|
|
|
// enable hot-reload and state-preserving
|
|
// compilation error display
|
|
app.use(hotMiddleware)
|
|
|
|
// serve pure static assets
|
|
var staticsPath = path.posix.join(webpackConfig.output.publicPath, 'statics/')
|
|
app.use(staticsPath, express.static('./src/statics'))
|
|
|
|
// try to serve Cordova statics for Play App
|
|
app.use(express.static(env.platform.cordovaAssets))
|
|
|
|
module.exports = app.listen(port, function (err) {
|
|
if (err) {
|
|
console.log(err)
|
|
process.exit(1)
|
|
}
|
|
|
|
// open browser if set so in /config/index.js
|
|
if (config.dev.openBrowser) {
|
|
devMiddleware.waitUntilValid(function () {
|
|
opn(uri)
|
|
})
|
|
}
|
|
})
|