electron-vite-react/scripts/dev.ts

70 lines
1.7 KiB
TypeScript

import { join } from 'path'
import { spawn, ChildProcess } from 'child_process'
import electron from 'electron'
import { RollupWatcher, RollupWatcherEvent, watch } from 'rollup'
import { createServer as createViteServer } from 'vite'
import pkg from '../package.json'
import {
mainOptions,
preloadOptions,
} from './utils'
const TAG = '[dev.ts]'
function eventHandle(ev: RollupWatcherEvent) {
if (ev.code === 'ERROR') {
console.error(TAG, ev.error)
} else if (ev.code === 'BUNDLE_START') {
console.log(TAG, `Rebuild start - ${ev.output}`)
}
}
function watchMain(): RollupWatcher {
let electronProcess: ChildProcess | null = null
return watch(mainOptions())
.on('event', ev => {
if (ev.code === 'END') {
electronProcess && electronProcess.kill()
electronProcess = spawn(
electron as unknown as string,
[join(__dirname, '..', pkg.main)],
{ stdio: 'inherit', env: Object.assign(process.env, pkg.env) },
)
} else if (ev.code === 'ERROR') {
electronProcess && electronProcess.kill()
electronProcess = null
}
eventHandle(ev)
})
}
function watchPreload(): RollupWatcher {
return watch(preloadOptions())
.on('event', ev => {
if (ev.code === 'END') {
// TODO Hot reload
}
eventHandle(ev)
})
}
; (async () => {
try {
const server = await (await createViteServer({
root: join(__dirname, '../react-ts'),
configFile: join(__dirname, '../react-ts/vite.config.ts'),
})).listen()
const { host = '127.0.0.1', port = 3000 } = server.config.server
console.log(TAG, `Server run at - http://${host}:${port}`)
watchPreload()
watchMain()
} catch (error) {
console.error(TAG, error)
}
})();