feat: better hot reload preload script

This commit is contained in:
草鞋没号 2021-11-09 09:01:52 +08:00
parent fc9abe80bc
commit 9eda22f353

View File

@ -1,36 +1,43 @@
import { watch, rollup, OutputOptions } from 'rollup' import { watch, rollup, OutputOptions, Plugin } from 'rollup'
import minimist from 'minimist' import minimist from 'minimist'
import chalk from 'chalk' import chalk from 'chalk'
import ora from 'ora' import ora from 'ora'
import WebSocket from 'ws' import WebSocket from 'ws'
import options from './rollup.config' import options from './rollup.config'
import { createWsServer, formatWsSendData } from './ws' import { createWsServer, formatWsSendData, WssServer } from './ws'
const argv = minimist(process.argv.slice(2)) const argv = minimist(process.argv.slice(2))
const opt = options({ proc: 'preload', env: argv.env }) const opts = options({ proc: 'preload', env: argv.env })
const TAG = '[build-preload.ts]' const TAG = '[build-preload.ts]'
const spinner = ora(`${TAG} Electron preload build...`) const spinner = ora(`${TAG} Electron preload build...`)
function hotReloadPreload(wssServer: WssServer): Plugin {
return {
name: 'hot-reload-preload',
writeBundle() {
// Hot reload preload script !!!
if (wssServer.instance?.readyState === WebSocket.OPEN) {
console.log(TAG, 'Hot reload preload script')
wssServer.instance.send(formatWsSendData({ cmd: 'reload', data: Date.now() }))
}
},
}
}
; (async () => { ; (async () => {
if (argv.watch) { if (argv.watch) {
const watcher = watch(opt) const wssServer = createWsServer()
const wssObj = createWsServer({ TAG }) opts.plugins = opts.plugins?.concat(hotReloadPreload(wssServer))
const watcher = watch(opts)
watcher.on('change', filename => { watcher.on('change', filename => {
const log = chalk.yellow(`change -- ${filename}`) console.log(TAG, chalk.yellow(`change -- ${filename}`))
console.log(TAG, log)
// Hot reload renderer process !!!
if (wssObj.instance?.readyState === WebSocket.OPEN) {
console.log(TAG, 'Hot reload renderer process')
wssObj.instance.send(formatWsSendData({ cmd: 'reload', data: Date.now() }))
}
}) })
} else { } else {
spinner.start() spinner.start()
try { try {
const build = await rollup(opt) const build = await rollup(opts)
await build.write(opt.output as OutputOptions) await build.write(opts.output as OutputOptions)
spinner.succeed() spinner.succeed()
process.exit() process.exit()
} catch (error) { } catch (error) {