const path = require('path'); const { execSync } = require('child_process'); const fs = require('fs'); // 创建一个兼容Node.js 12的删除文件夹函数 function deleteFolderRecursive(dir) { if (fs.existsSync(dir)) { const files = fs.readdirSync(dir); for (let i = 0; i < files.length; i++) { const file = files[i]; const curPath = path.join(dir, file); if (fs.lstatSync(curPath).isDirectory()) { // 递归删除子文件夹 deleteFolderRecursive(curPath); } else { // 删除文件 fs.unlinkSync(curPath); } } // 删除空文件夹 fs.rmdirSync(dir); } } // 创建打包前的准备工作 function prepareForBuild() { console.log('开始准备Windows 7目录模式应用打包...'); try { // 清理之前的构建文件 - 使用兼容Node.js 12的方法 const buildDir = path.join(__dirname, 'dist_electron'); if (fs.existsSync(buildDir)) { console.log('清理之前的构建文件...'); deleteFolderRecursive(buildDir); } // 确保data目录存在 const dataDir = path.join(__dirname, 'data'); if (!fs.existsSync(dataDir)) { fs.mkdirSync(dataDir); fs.writeFileSync(path.join(dataDir, '.gitignore'), '*\n!.gitignore'); console.log('创建data目录完成'); } console.log('准备工作完成'); } catch (error) { console.error('准备工作失败:', error); process.exit(1); } } // 复制说明文件到目标目录 function copyReadmeFile() { console.log('开始复制说明.txt文件...'); try { // 源说明文件路径 const sourceReadmePath = path.join(__dirname, '说明.txt'); // 检查源文件是否存在 if (!fs.existsSync(sourceReadmePath)) { console.error('未找到说明.txt文件,请先在项目根目录创建该文件'); return; } // 查找win-unpacked目录(可能有x64和ia32两个版本) const buildDir = path.join(__dirname, 'dist_electron'); const possibleDirs = [ path.join(buildDir, 'win-unpacked'), path.join(buildDir, 'win-ia32-unpacked'), path.join(buildDir, 'win-x64-unpacked') ]; // 确定存在的目录 let unpackedDir = null; for (const dir of possibleDirs) { if (fs.existsSync(dir)) { unpackedDir = dir; break; } } if (!unpackedDir) { console.error('未找到win-unpacked目录'); return; } // 目标文件路径 const targetReadmePath = path.join(unpackedDir, '说明.txt'); // 复制文件 fs.copyFileSync(sourceReadmePath, targetReadmePath); console.log(`说明.txt文件已复制到:${targetReadmePath}`); } catch (error) { console.error('复制说明.txt文件失败:', error); } } // 执行打包命令 - 配置为dir模式 function buildDirApp() { console.log('开始构建Windows 7目录模式应用...'); try { // 完全删除签名环境变量 delete process.env.WIN_CSC_LINK; delete process.env.WIN_CSC_KEY_PASSWORD; // 设置环境变量明确禁用签名相关功能 process.env.ELECTRON_BUILDER_SKIP_NOTARIZATION = 'true'; process.env.ELECTRON_SKIP_NOTARIZE = 'true'; // 使用dir模式构建命令 execSync( 'npm run electron:build -- --win dir --ia32 --x64 --publish never', { stdio: 'inherit' } ); console.log('Windows 7目录模式应用构建完成!'); console.log('构建产物位于 dist_electron 目录'); // 复制说明文件 copyReadmeFile(); } catch (error) { console.error('构建失败:', error); process.exit(1); } } // 主函数 function main() { console.log('==== Windows 7目录模式应用打包工具 ===='); prepareForBuild(); buildDirApp(); } // 执行主函数 main();