initial commit
This commit is contained in:
commit
13ae6c773c
36 files changed
+24137
No files matched your search
+152
@@ -0,0 +1,152 @@
|
||||
import dotenv from 'dotenv'
|
||||
import chalk from 'chalk'
|
||||
import electron from 'electron'
|
||||
import path from 'path'
|
||||
import { spawn } from 'child_process'
|
||||
import webpack from 'webpack'
|
||||
import WebpackDevServer from 'webpack-dev-server'
|
||||
import webpackHotMiddleware from 'webpack-hot-middleware'
|
||||
|
||||
import mainConfig from './config/webpack.main.mjs'
|
||||
import rendererConfig from './config/webpack.renderer.mjs'
|
||||
import { fileURLToPath } from 'url'
|
||||
|
||||
dotenv.config({ path: '.env.dev' })
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url))
|
||||
let electronProcess = null
|
||||
let manualRestart = false
|
||||
|
||||
function log (processName, data, color = 'yellow') {
|
||||
let strLog = ''
|
||||
|
||||
if (typeof data === 'object') {
|
||||
data.toString().split(/\r?\n/).forEach(line => {
|
||||
strLog += ' ' + line + '\n'
|
||||
})
|
||||
} else {
|
||||
strLog += ` ${data}\n`
|
||||
}
|
||||
|
||||
if (/[\dA-z]+/.test(strLog)) {
|
||||
console.log(`${chalk[color].bold(`[${processName}]---------------`)}\n`)
|
||||
console.log(`${strLog}${chalk[color].bold(`[${processName}]---------------`)}\n`)
|
||||
}
|
||||
}
|
||||
|
||||
function startRenderer () {
|
||||
return new Promise(resolve => {
|
||||
(async () => {
|
||||
rendererConfig.entry.renderer = [path.join(__dirname, 'devClient.mjs'), rendererConfig.entry.renderer]
|
||||
|
||||
const compiler = webpack({
|
||||
mode: 'development',
|
||||
...rendererConfig
|
||||
})
|
||||
|
||||
compiler.hooks.done.tap('done', stats => {
|
||||
log('Renderer', stats)
|
||||
})
|
||||
|
||||
const server = new WebpackDevServer(
|
||||
{
|
||||
port: 9080,
|
||||
liveReload: true,
|
||||
static: {
|
||||
directory: path.join(__dirname, '../'),
|
||||
watch: {
|
||||
usePolling: true,
|
||||
ignored: /node_modules/
|
||||
}
|
||||
},
|
||||
setupMiddlewares (middlewares, devServer) {
|
||||
devServer.app.use(webpackHotMiddleware(compiler, {
|
||||
log: false,
|
||||
heartbeat: 2500
|
||||
}))
|
||||
devServer.middleware.waitUntilValid(() => {
|
||||
resolve()
|
||||
})
|
||||
|
||||
return middlewares
|
||||
}
|
||||
},
|
||||
compiler
|
||||
)
|
||||
|
||||
await server.start()
|
||||
})()
|
||||
})
|
||||
}
|
||||
|
||||
function startMain () {
|
||||
return new Promise(resolve => {
|
||||
mainConfig.entry.main = [path.join(__dirname, '../src/main/index.dev.js'), mainConfig.entry.main]
|
||||
|
||||
const compiler = webpack({
|
||||
mode: 'development',
|
||||
...mainConfig
|
||||
})
|
||||
|
||||
compiler.hooks.watchRun.tapAsync('watch-run', (compilation, done) => {
|
||||
log('Main', chalk.white.bold('Compiling...'))
|
||||
done()
|
||||
})
|
||||
|
||||
compiler.watch({}, (err, stats) => {
|
||||
if (err) {
|
||||
console.log(err)
|
||||
return
|
||||
}
|
||||
|
||||
log('Main', stats)
|
||||
|
||||
if (electronProcess?.kill) {
|
||||
manualRestart = true
|
||||
process.kill(electronProcess.pid)
|
||||
electronProcess = null
|
||||
startElectron()
|
||||
|
||||
setTimeout(() => {
|
||||
manualRestart = false
|
||||
}, 3500)
|
||||
}
|
||||
|
||||
resolve()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function startElectron () {
|
||||
electronProcess = spawn(electron, [
|
||||
...[
|
||||
'--inspect=5858',
|
||||
path.join(__dirname, '/../dist/electron/main.js')
|
||||
],
|
||||
...process.argv.slice(2)
|
||||
])
|
||||
|
||||
electronProcess.stdout.on('data', data => {
|
||||
log('Electron', data, 'blue')
|
||||
})
|
||||
|
||||
electronProcess.stderr.on('data', data => {
|
||||
log('Electron', data, 'red')
|
||||
})
|
||||
|
||||
electronProcess.on('close', () => {
|
||||
if (!manualRestart) {
|
||||
process.exit()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
(async () => {
|
||||
try {
|
||||
await startRenderer()
|
||||
await startMain()
|
||||
startElectron()
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
}
|
||||
})()
|
||||
Reference in new issue
Block a user