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.
102 lines
2.8 KiB
102 lines
2.8 KiB
// @ts-nocheck
|
|
|
|
import { main } from "../package.json"
|
|
import { join } from "path"
|
|
import * as electron from "electron"
|
|
import * as dotenv from "dotenv"
|
|
import * as ora from "ora"
|
|
import * as chalk from "chalk"
|
|
import * as minimist from "minimist"
|
|
|
|
import { exec, spawn, ChildProcess } from "child_process"
|
|
import { watch, rollup, OutputOptions } from "rollup"
|
|
import { waitOn } from "./utils"
|
|
import options from "./rollup.config"
|
|
// 注入环境变量
|
|
dotenv.config({ path: join(__dirname, "../.env") })
|
|
// 解析命令行参数
|
|
const argv = minimist(process.argv.slice(2))
|
|
// rollup配置
|
|
const opts = options(argv.env)
|
|
const TAG = "[build-main.ts]"
|
|
// 加载图
|
|
const spinner = ora(`${TAG} Electron build...`)
|
|
|
|
function buildVite() {
|
|
return new Promise((resolve, reject) => {
|
|
let viteProcess = spawn("node", [join(__dirname, "../node_modules/vite/bin/vite.js"), "build"], {
|
|
stdio: "pipe",
|
|
env: Object.assign(process.env, { NODE_ENV: argv.env }),
|
|
})
|
|
if (viteProcess) {
|
|
viteProcess.stdout.on("end", data => {
|
|
console.log(`\n[vite build end]`)
|
|
resolve(viteProcess)
|
|
})
|
|
viteProcess.stderr.on("data", data => {
|
|
console.error(`\n[vite build err]: ${data}`)
|
|
reject()
|
|
})
|
|
} else {
|
|
reject()
|
|
}
|
|
})
|
|
}
|
|
function tscCheck() {
|
|
return new Promise((resolve, reject) => {
|
|
let tscProcess = spawn("node", [join(__dirname, "../node_modules/typescript/bin/tsc")], {
|
|
stdio: "pipe",
|
|
env: Object.assign(process.env, { NODE_ENV: argv.env }),
|
|
})
|
|
if (tscProcess) {
|
|
tscProcess.stdout.on("end", data => {
|
|
console.log(`[tsc check end]`)
|
|
resolve(tscProcess)
|
|
})
|
|
tscProcess.stderr.on("data", data => {
|
|
console.error(`[tsc check err]: ${data}`)
|
|
reject()
|
|
})
|
|
} else {
|
|
reject()
|
|
}
|
|
})
|
|
}
|
|
async function buildMain() {
|
|
try {
|
|
const build = await rollup(opts)
|
|
build.write(opts.output as OutputOptions)
|
|
} catch (error) {
|
|
console.log(`\n${TAG} ${chalk.red("构建报错")}\n`, error, "\n")
|
|
}
|
|
}
|
|
|
|
function buildElectron() {
|
|
return new Promise((resolve, reject) => {
|
|
let tscProcess = spawn("node", [join(__dirname, "../node_modules/@electron-forge/cli/dist/electron-forge.js"), "make"], {
|
|
stdio: "pipe",
|
|
env: Object.assign(process.env, { NODE_ENV: argv.env }),
|
|
})
|
|
if (tscProcess) {
|
|
tscProcess.stdout.on("data", data => {
|
|
console.log(`[electron build]: ${data}`)
|
|
})
|
|
tscProcess.stdout.on("end", data => {
|
|
console.log(`[electron build end]`)
|
|
resolve(tscProcess)
|
|
})
|
|
tscProcess.stderr.on("data", data => {
|
|
console.error(`[electron build err]: ${data}`)
|
|
reject()
|
|
})
|
|
} else {
|
|
reject()
|
|
}
|
|
})
|
|
}
|
|
;(async () => {
|
|
await tscCheck()
|
|
await buildVite()
|
|
await buildMain()
|
|
// await buildElectron()
|
|
})()
|
|
|