check-size.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. const fs = require('fs');
  2. const path = require('path');
  3. const jsDir = path.join(__dirname, 'dist-prod/assets/js');
  4. const files = fs.readdirSync(jsDir)
  5. .filter(f => f.endsWith('.js') && !f.endsWith('.gz') && !f.endsWith('.br'))
  6. .map(f => ({
  7. name: f,
  8. size: fs.statSync(path.join(jsDir, f)).size
  9. }))
  10. .sort((a, b) => b.size - a.size)
  11. .slice(0, 25);
  12. console.log('Top 25 largest JS files (uncompressed):');
  13. console.log('========================================');
  14. files.forEach((f, i) => {
  15. const sizeKB = (f.size / 1024).toFixed(1);
  16. console.log(`${String(i+1).padStart(2)}. ${f.name.padEnd(40)} ${sizeKB.padStart(8)} KB`);
  17. });
  18. // Total size
  19. const allFiles = fs.readdirSync(jsDir).filter(f => f.endsWith('.js') && !f.endsWith('.gz') && !f.endsWith('.br'));
  20. const totalSize = allFiles.reduce((sum, f) => sum + fs.statSync(path.join(jsDir, f)).size, 0);
  21. console.log('\n========================================');
  22. console.log(`Total JS size: ${(totalSize/1024/1024).toFixed(2)} MB (${allFiles.length} files)`);
  23. // Check for login/entry chunks
  24. console.log('\nKey entry chunks:');
  25. const keyFiles = allFiles.filter(f =>
  26. f.startsWith('Login-') || f.startsWith('vendor-') || f.startsWith('element-plus-') ||
  27. f.startsWith('Layout-') || f.includes('form-create') || f === 'index.js' ||
  28. f.startsWith('echarts-') || f.startsWith('bpmn-')
  29. );
  30. keyFiles.forEach(f => {
  31. const size = fs.statSync(path.join(jsDir, f)).size;
  32. console.log(` ${f}: ${(size/1024).toFixed(1)} KB`);
  33. });