You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

70 lines
2.0 KiB

/**
* electron 打包
*/
import { join } from "path"
import { exec, spawn, ChildProcess } from "child_process"
import { watch, rollup, OutputOptions } from "rollup"
import electron from "electron"
import { waitOn } from "./utils"
import options from "./rollup.config"
import { main } from "../package.json"
const ora = require("ora")
const dotenv = require("dotenv")
const chalk = require("chalk")
const minimist = require("minimist")
dotenv.config({ path: join(__dirname, "../.env") })
const argv = minimist(process.argv.slice(2))
const opts = options(argv.env)
const TAG = "[build-main.ts]"
const spinner = ora(`${TAG} Electron build...`)
if (argv.watch) {
waitOn({ port: process.env.PORT as string }).then(msg => {
const watcher = watch(opts)
let child: ChildProcess | null
let manualRestart = false
watcher.on("change", filename => {
const log = chalk.green(`change -- ${filename}`)
console.log(TAG, log)
})
watcher.on("event", ev => {
if (ev.code === "END") {
if (child && child.kill) {
console.log(child.pid)
manualRestart = true
// <number>child.pid
// child.kill()
process.kill( <number>child.pid)
child = null
setTimeout(() => {
manualRestart = false
}, 5000)
}
child = exec(`electron-forge start --inspect-electron --app-path ${join(__dirname, `../${main}`)}`, {
env: Object.assign(process.env, { NODE_ENV: argv.env }),
})
child.on("close", () => {
if (!manualRestart) process.exit()
})
} else if (ev.code === "ERROR") {
console.log(ev.error)
}
})
})
} else {
spinner.start()
rollup(opts)
.then(build => {
spinner.stop()
console.log(TAG, chalk.green("Electron build successed."))
build.write(opts.output as OutputOptions)
})
.catch(error => {
spinner.stop()
console.log(`\n${TAG} ${chalk.red("构建报错")}\n`, error, "\n")
})
}