const fs = require('fs'); const path = require('path'); const jsDir = path.join(__dirname, 'dist-prod/assets/js'); const files = fs.readdirSync(jsDir) .filter(f => f.endsWith('.js') && !f.endsWith('.gz') && !f.endsWith('.br')) .map(f => ({ name: f, size: fs.statSync(path.join(jsDir, f)).size })) .sort((a, b) => b.size - a.size) .slice(0, 25); console.log('Top 25 largest JS files (uncompressed):'); console.log('========================================'); files.forEach((f, i) => { const sizeKB = (f.size / 1024).toFixed(1); console.log(`${String(i+1).padStart(2)}. ${f.name.padEnd(40)} ${sizeKB.padStart(8)} KB`); }); // Total size const allFiles = fs.readdirSync(jsDir).filter(f => f.endsWith('.js') && !f.endsWith('.gz') && !f.endsWith('.br')); const totalSize = allFiles.reduce((sum, f) => sum + fs.statSync(path.join(jsDir, f)).size, 0); console.log('\n========================================'); console.log(`Total JS size: ${(totalSize/1024/1024).toFixed(2)} MB (${allFiles.length} files)`); // Check for login/entry chunks console.log('\nKey entry chunks:'); const keyFiles = allFiles.filter(f => f.startsWith('Login-') || f.startsWith('vendor-') || f.startsWith('element-plus-') || f.startsWith('Layout-') || f.includes('form-create') || f === 'index.js' || f.startsWith('echarts-') || f.startsWith('bpmn-') ); keyFiles.forEach(f => { const size = fs.statSync(path.join(jsDir, f)).size; console.log(` ${f}: ${(size/1024).toFixed(1)} KB`); });