| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- const { execSync, spawn } = require('child_process')
- const path = require('path')
- const fs = require('fs')
- function runElectronBuilder(cwd, env) {
- const binName = process.platform === 'win32' ? 'electron-builder.cmd' : 'electron-builder'
- const electronBuilderBin = path.join(cwd, 'node_modules', '.bin', binName)
- if (!fs.existsSync(electronBuilderBin)) {
- return Promise.reject(new Error('未找到 electron-builder,请先在项目根目录执行 npm install。'))
- }
- return new Promise((resolve, reject) => {
- const args = ['--win', '--arm64']
- const opts = {
- cwd,
- stdio: ['inherit', 'inherit', 'inherit'],
- env: { ...process.env, ...env, DEBUG: 'electron-builder' },
- windowsHide: false
- }
- if (process.platform === 'win32') {
- opts.shell = true
- }
- const child = spawn(electronBuilderBin, args, opts)
- let elapsed = 0
- const progressInterval = setInterval(() => {
- elapsed += 10
- console.log(` → 打包进行中... (已等待 ${elapsed} 秒,请勿关闭)`)
- }, 10000)
- child.on('close', (code) => {
- clearInterval(progressInterval)
- if (code !== 0) {
- const err = new Error(`electron-builder 退出码: ${code}`)
- err.exitCode = code
- reject(err)
- } else resolve()
- })
- child.on('error', (err) => {
- clearInterval(progressInterval)
- reject(err)
- })
- })
- }
- const projectRoot = path.resolve(__dirname, '..')
- const distDir = path.join(projectRoot, 'dist')
- function cleanDist(keepDir) {
- if (!fs.existsSync(distDir)) return
- for (const name of fs.readdirSync(distDir)) {
- if (name === keepDir) continue
- const full = path.join(distDir, name)
- try {
- if (fs.statSync(full).isDirectory()) fs.rmSync(full, { recursive: true })
- else fs.unlinkSync(full)
- } catch (e) {
- console.warn('clean:', e.message)
- }
- }
- }
- async function main() {
- const keepDir = 'win-arm64-unpacked'
- try {
- console.log('[1/3] Vite build...')
- execSync('npm run build', { cwd: projectRoot, stdio: 'inherit' })
- } catch (e) {
- console.error('\n[错误] 第 1 步 Vite build 失败,已停止打包。')
- console.error(e.message || e)
- process.exit(1)
- }
- try {
- console.log('[2/3] Electron builder win arm64...(每 10 秒会打印进度,请勿关闭)')
- await runElectronBuilder(projectRoot, {})
- } catch (e) {
- console.error('\n[错误] 第 2 步 electron-builder 失败,已停止打包。')
- console.error(e.message || e)
- process.exit(1)
- }
- try {
- console.log('[3/3] 清理 dist,只保留 win-arm64-unpacked...')
- cleanDist(keepDir)
- console.log('Done. Output: dist\\win-arm64-unpacked')
- } catch (e) {
- console.error('\n[错误] 第 3 步 清理 dist 失败。')
- console.error(e.message || e)
- process.exit(1)
- }
- }
- if (require.main === module) {
- main().catch((e) => {
- console.error(e)
- process.exit(1)
- })
- } else {
- module.exports = { cleanDist }
- }
|