| 12345678910111213141516171819202122232425262728293031323334353637 |
- 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`);
- });
|