@quasar/app
Version:
Quasar Framework local CLI
54 lines (40 loc) • 1.35 kB
JavaScript
const webpack = require('webpack')
const WebpackDevServer = require('webpack-dev-server')
const openBrowser = require('./helpers/open-browser')
let openedBrowser = false
module.exports = class DevServer {
constructor (quasarConfFile) {
this.quasarConfFile = quasarConfFile
this.server = null
}
listen () {
const cfg = this.quasarConfFile.quasarConf
const webpackConf = this.quasarConfFile.webpackConf
return new Promise(resolve => {
const compiler = webpack(webpackConf.renderer)
compiler.hooks.done.tap('done-compiling', stats => {
if (this.__started === true) { return }
// start dev server if there are no errors
if (stats.hasErrors() === true) {
return
}
this.__started = true
resolve()
if (openedBrowser === false) {
openedBrowser = true
if (cfg.__devServer.open && ['spa', 'pwa'].includes(cfg.ctx.modeName)) {
openBrowser({ url: cfg.build.APP_URL, opts: cfg.__devServer.openOptions })
}
}
})
// start building & launch server
this.server = new WebpackDevServer(cfg.devServer, compiler)
this.server.start()
})
}
stop () {
return this.server !== null
? this.server.stop().finally(() => { this.server = null })
: Promise.resolve()
}
}