const fs = require('fs-extra'); const path = require('path'); async function main() { try { console.log('Starting electron build process...'); // Clean directories const distElectronDir = path.resolve(__dirname, '../dist-electron'); const buildDir = path.resolve(__dirname, '../dist-electron-build'); await fs.emptyDir(distElectronDir); await fs.emptyDir(buildDir); console.log('Cleaned directories'); // First build the web app if it doesn't exist const webDist = path.resolve(__dirname, '../dist'); if (!await fs.pathExists(webDist)) { console.log('Web dist not found, building web app first...'); throw new Error('Please run \'npm run build\' first to build the web app'); } // Copy web files to www directory const wwwDir = path.join(distElectronDir, 'www'); await fs.copy(webDist, wwwDir); // Fix paths in index.html const indexPath = path.join(wwwDir, 'index.html'); let indexContent = await fs.readFile(indexPath, 'utf8'); indexContent = indexContent.replace(/src="\//g, 'src="./'); indexContent = indexContent.replace(/href="\//g, 'href="./'); indexContent = indexContent.replace(/\/assets\//g, './assets/'); // Fix asset paths with explicit relative path indexContent = indexContent.replace(/\.\/\.\/assets\//g, './assets/'); // Clean up any double dots await fs.writeFile(indexPath, indexContent); console.log('Copied and fixed web files in:', wwwDir); // Copy main process files const mainProcessFiles = [ 'src/electron/main.js', ]; for (const file of mainProcessFiles) { const destPath = path.join(distElectronDir, path.basename(file)); await fs.copy(file, destPath); } // Create the production package.json const devPackageJson = require('../package.json'); const prodPackageJson = { name: devPackageJson.name, version: devPackageJson.version, description: devPackageJson.description, author: devPackageJson.author, main: 'main.js', private: true, }; await fs.writeJson( path.join(distElectronDir, 'package.json'), prodPackageJson, { spaces: 2 } ); // Verify the structure console.log('\nVerifying build structure:'); const printDir = async (dir, prefix = '') => { const items = await fs.readdir(dir); for (const item of items) { const fullPath = path.join(dir, item); const stat = await fs.stat(fullPath); console.log(`${prefix}${item}${stat.isDirectory() ? '/' : ''}`); if (stat.isDirectory()) { await printDir(fullPath, `${prefix} `); } } }; await printDir(distElectronDir); console.log('\nBuild completed successfully!'); } catch (error) { console.error('Build failed:', error); process.exit(1); } } main().catch(console.error);