mirror of
https://github.com/BoostIo/Boostnote
synced 2025-12-12 17:26:17 +00:00
77 lines
1.8 KiB
JavaScript
77 lines
1.8 KiB
JavaScript
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
|
|
}
|
|
|
|
function startServer() {
|
|
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) => {
|
|
server.listen(port, 'localhost', function(err) {
|
|
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])
|
|
}
|
|
}
|
|
})
|
|
})
|
|
})
|
|
}
|
|
|
|
function startElectron() {
|
|
spawn(electron, ['--hot', './index.js'], { stdio: 'inherit' })
|
|
.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)
|
|
})
|