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

// @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()
})()