/** * 构建脚本:准备 Windows 打包 */ import { mkdirSync, existsSync, writeFileSync } from 'fs'; import { join } from 'path'; const rootDir = process.cwd(); const buildDir = join(rootDir, 'build'); const modelsDir = join(rootDir, 'models'); console.log('🔧 准备 Windows 打包...\n'); // 创建 build 目录 if (!existsSync(buildDir)) { mkdirSync(buildDir, { recursive: true }); console.log('✅ 创建 build 目录'); } // 创建占位图标文件(实际使用时应替换为真实图标) const icoPath = join(buildDir, 'icon.ico'); if (!existsSync(icoPath)) { // 创建一个简单的占位文件 writeFileSync(icoPath, ''); console.log('⚠️ 图标文件不存在,已创建占位文件'); console.log(' 请替换为真实的 icon.ico 文件 (256x256 推荐)'); } // 检查模型文件 const modelFiles = ['sensevoice.onnx', 'whisper.onnx', 'paraformer.onnx']; const foundModels = []; const missingModels = []; for (const model of modelFiles) { const modelPath = join(modelsDir, model); if (existsSync(modelPath)) { foundModels.push(model); } else { missingModels.push(model); } } console.log('📦 模型文件检查:'); if (foundModels.length > 0) { console.log(` ✅ 找到:${foundModels.join(', ')}`); } if (missingModels.length > 0) { console.log(` ⚠️ 缺失:${missingModels.join(', ')}`); console.log(' 模型文件将被打包,但需要用户自行下载'); } // 创建 Windows 安装包说明 const readmePath = join(buildDir, 'BUILD_README.txt'); writeFileSync(readmePath, `Impress ASR Input - Windows 打包说明 ===================================== 构建命令: npm run build:win - 创建 NSIS 安装程序和 ZIP 包 npm run build:win:dir - 仅创建未打包的文件目录 输出位置: release/Impress ASR Input-0.1.0-win-x64-setup.exe (安装程序) release/Impress ASR Input-0.1.0-win-x64.zip (压缩包) 模型文件: 请将下载的 ONNX 模型放入 models/ 目录 支持的模型:sensevoice.onnx, whisper.onnx, paraformer.onnx 图标文件: 请将 icon.ico (256x256) 放入 build/ 目录 `); console.log('\n✅ 打包准备完成'); console.log('\n下一步:'); console.log(' 1. 将模型文件放入 models/ 目录 (可选)'); console.log(' 2. 将 icon.ico 放入 build/ 目录 (可选)'); console.log(' 3. 运行:npm run build:win');