Files

57 lines
2.7 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 打包资源准备 — 组装 desktop/resources/(electron-builder extraResources 的来源)
*
* 1. frontend/ ← nuxt generate 产物(.output/public,含 index.html)
* 2. workspace-template/ ← backend/workspace(skills + prompts,首启动拷入 userData)
* 3. bin-<os>-<arch>/ ← ffmpeg/ffprobe 按平台与架构分目录(electron-builder 宏各取所需,
* 避免 mac 包带 exe、win 包带 mac 二进制白白 +144MB)
*/
import fs from 'fs'
import path from 'path'
import { fileURLToPath } from 'url'
import { createRequire } from 'module'
import { prepareMacMedia } from './prepare-mac-media.mjs'
const __dirname = path.dirname(fileURLToPath(import.meta.url))
const DESKTOP = path.resolve(__dirname, '..')
const REPO = path.resolve(DESKTOP, '..')
const RES = path.join(DESKTOP, 'resources')
fs.rmSync(RES, { recursive: true, force: true })
fs.mkdirSync(RES, { recursive: true })
// 1. 前端静态产物
const frontendSrc = path.join(REPO, 'frontend', '.output', 'public')
if (!fs.existsSync(path.join(frontendSrc, 'index.html'))) {
console.error('缺少前端产物:请先在 frontend/ 执行 npm run generate')
process.exit(1)
}
fs.cpSync(frontendSrc, path.join(RES, 'frontend'), { recursive: true })
console.log('resources/frontend ✓')
// 2. workspace 模板(skills 技能 + prompts 提示词)
const workspaceSrc = path.join(REPO, 'backend', 'workspace')
fs.cpSync(workspaceSrc, path.join(RES, 'workspace-template'), { recursive: true })
console.log('resources/workspace-template ✓')
// 3. macOS 两种架构独立准备;ffprobe-static 的 arm64 目录实际可能含 x64 二进制,
// 因此两种媒体工具统一使用 ffmpeg-static 对应版本的官方发布产物。
const req = createRequire(import.meta.url)
if (process.platform === 'darwin') await prepareMacMedia(DESKTOP, RES)
const binWin = path.join(RES, 'bin-win-x64')
fs.mkdirSync(binWin, { recursive: true })
// 3b. Windows 二进制(打 win 包用;不打 win 包时缺失不报错,仅提示)
const winBinDir = path.join(DESKTOP, 'build', 'win-bin')
const ffmpegWin = path.join(winBinDir, 'ffmpeg.exe')
const ffprobeWinSrc = path.join(path.dirname(req.resolve('ffprobe-static/package.json')), 'bin', 'win32', 'x64', 'ffprobe.exe')
if (!fs.existsSync(ffmpegWin)) {
console.warn('提示: 缺少 build/win-bin/ffmpeg.exe,Windows 包将无法内置 ffmpeg。' +
'获取: https://github.com/eugeneware/ffmpeg-static/releases/download/b6.0/ffmpeg-win32-x64')
}
if (fs.existsSync(ffmpegWin) && fs.existsSync(ffprobeWinSrc)) {
fs.copyFileSync(ffmpegWin, path.join(binWin, 'ffmpeg.exe'))
fs.copyFileSync(ffprobeWinSrc, path.join(binWin, 'ffprobe.exe'))
console.log('resources/bin-win-x64 ✓')
}