2018-07-19 17:04:55 +07:00
const webpack = require ( 'webpack' )
const WebpackDevServer = require ( 'webpack-dev-server' )
const config = require ( '../webpack.config' )
const signale = require ( 'signale' )
const { spawn } = require ( 'child_process' )
const electron = require ( 'electron' )
const port = 8080
let server = null
let firstRun = true
const options = {
publicPath : config . output . publicPath ,
hot : true ,
inline : true ,
quiet : true
}
2020-02-05 13:28:27 +13:00
function startServer ( ) {
2018-07-19 17:04:55 +07:00
config . plugins . push ( new webpack . HotModuleReplacementPlugin ( ) )
config . entry . main . unshift (
` webpack-dev-server/client?http://localhost: ${ port } / ` ,
'webpack/hot/dev-server'
)
const compiler = webpack ( config )
server = new WebpackDevServer ( compiler , options )
return new Promise ( ( resolve , reject ) => {
2020-02-05 13:28:27 +13:00
server . listen ( port , 'localhost' , function ( err ) {
2018-07-19 17:04:55 +07:00
if ( err ) {
reject ( err )
}
signale . success ( ` Webpack Dev Server listening at localhost: ${ port } ` )
signale . watch ( ` Waiting for webpack to bundle... ` )
compiler . plugin ( 'done' , stats => {
if ( ! stats . hasErrors ( ) ) {
signale . success ( ` Bundle success ! ` )
resolve ( )
} else {
if ( ! firstRun ) {
console . log ( stats . compilation . errors [ 0 ] )
} else {
firstRun = false
reject ( stats . compilation . errors [ 0 ] )
}
}
} )
} )
} )
}
2020-02-05 13:28:27 +13:00
function startElectron ( ) {
2018-10-10 22:53:03 +02:00
spawn ( electron , [ '--hot' , './index.js' ] , { stdio : 'inherit' } )
2018-07-19 17:04:55 +07:00
. on ( 'close' , ( ) => {
server . close ( )
} )
. on ( 'error' , err => {
signale . error ( err )
server . close ( )
} )
. on ( 'disconnect' , ( ) => {
server . close ( )
} )
. on ( 'exit' , ( ) => {
server . close ( )
} )
}
startServer ( )
. then ( ( ) => {
startElectron ( )
signale . success ( 'Electron started' )
} )
. catch ( err => {
signale . error ( err )
process . exit ( 1 )
} )