2022-03-17 09:21:02 +01:00
|
|
|
import { spawn } from 'child_process'
|
|
|
|
import { createServer as ViteCreateServer, build as viteBuild, createLogger } from 'vite'
|
|
|
|
import colors from 'picocolors'
|
|
|
|
import { InlineConfig, resolveConfig } from './config'
|
2022-06-19 18:38:05 +02:00
|
|
|
import { ensureElectronEntryFile, getElectronPath, resolveHostname } from './utils'
|
2022-03-17 09:21:02 +01:00
|
|
|
|
|
|
|
export async function createServer(inlineConfig: InlineConfig = {}): Promise<void> {
|
|
|
|
const config = await resolveConfig(inlineConfig, 'serve', 'development')
|
|
|
|
if (config.config) {
|
2022-03-31 13:56:42 +02:00
|
|
|
const logger = createLogger(inlineConfig.logLevel)
|
|
|
|
|
|
|
|
const mainViteConfig = config.config?.main
|
|
|
|
if (mainViteConfig) {
|
|
|
|
await viteBuild(mainViteConfig)
|
|
|
|
|
|
|
|
logger.info(colors.green(`\nbuild the electron main process successfully`))
|
|
|
|
}
|
|
|
|
|
|
|
|
const preloadViteConfig = config.config?.preload
|
|
|
|
if (preloadViteConfig) {
|
|
|
|
logger.info(colors.gray(`\n-----\n`))
|
|
|
|
await viteBuild(preloadViteConfig)
|
|
|
|
|
|
|
|
logger.info(colors.green(`\nbuild the electron preload files successfully`))
|
|
|
|
}
|
|
|
|
|
2022-03-17 09:21:02 +01:00
|
|
|
const rendererViteConfig = config.config?.renderer
|
|
|
|
if (rendererViteConfig) {
|
2022-03-31 13:56:42 +02:00
|
|
|
logger.info(colors.gray(`\n-----\n`))
|
|
|
|
|
2022-03-17 09:21:02 +01:00
|
|
|
const server = await ViteCreateServer(rendererViteConfig)
|
|
|
|
|
|
|
|
if (!server.httpServer) {
|
|
|
|
throw new Error('HTTP server not available')
|
|
|
|
}
|
|
|
|
|
|
|
|
await server.listen()
|
|
|
|
|
|
|
|
const conf = server.config.server
|
|
|
|
|
|
|
|
const protocol = conf.https ? 'https:' : 'http:'
|
2022-06-19 18:38:05 +02:00
|
|
|
const host = resolveHostname(conf.host)
|
2022-03-17 09:21:02 +01:00
|
|
|
const port = conf.port
|
|
|
|
process.env.ELECTRON_RENDERER_URL = `${protocol}//${host}:${port}`
|
|
|
|
|
2022-03-31 13:56:42 +02:00
|
|
|
const slogger = server.config.logger
|
2022-03-17 09:21:02 +01:00
|
|
|
|
2022-03-31 13:56:42 +02:00
|
|
|
slogger.info(colors.green(`dev server running for the electron renderer process at:\n`), {
|
|
|
|
clear: !slogger.hasWarned
|
2022-03-17 09:21:02 +01:00
|
|
|
})
|
|
|
|
|
|
|
|
server.printUrls()
|
|
|
|
}
|
|
|
|
|
|
|
|
ensureElectronEntryFile(inlineConfig.root)
|
|
|
|
|
|
|
|
const electronPath = getElectronPath()
|
|
|
|
|
|
|
|
const ps = spawn(electronPath, ['.'])
|
|
|
|
ps.stdout.on('data', chunk => {
|
|
|
|
chunk.toString().trim() && logger.info(chunk.toString())
|
|
|
|
})
|
|
|
|
ps.stderr.on('data', chunk => {
|
|
|
|
chunk.toString().trim() && logger.error(chunk.toString())
|
|
|
|
})
|
|
|
|
ps.on('close', process.exit)
|
|
|
|
|
|
|
|
logger.info(colors.green(`\nstart electron app...`))
|
|
|
|
}
|
|
|
|
}
|