const fs = require('fs'); const path = require('path'); // 源图片目录和构建后的图片目录 const srcDir = path.join(__dirname, 'src', 'assets'); const distDir = path.join(__dirname, 'dist', 'img'); // 比较源图片和构建后图片的大小 function compareImageSizes() { try { // 读取dist目录下的所有图片文件 const distFiles = fs.readdirSync(distDir).filter(file => file.endsWith('.png')); console.log('图片优化效果验证(源图片 vs 构建后图片):'); console.log('-' .repeat(70)); console.log('源文件名'.padEnd(25), '构建后文件名'.padEnd(30), '大小对比'); console.log('-' .repeat(70)); // 遍历dist目录下的图片文件 for (const distFile of distFiles) { // 提取源文件名(去掉hash和扩展名) const srcFileName = distFile.replace(/\.[a-f0-9]{8}\.png$/, '.png'); const srcPath = path.join(srcDir, srcFileName); const distPath = path.join(distDir, distFile); // 检查源文件是否存在 if (fs.existsSync(srcPath)) { const srcStats = fs.statSync(srcPath); const distStats = fs.statSync(distPath); const srcSize = srcStats.size; const distSize = distStats.size; const reduction = ((srcSize - distSize) / srcSize * 100).toFixed(2); console.log( srcFileName.padEnd(25), distFile.padEnd(30), `${(srcSize / 1024).toFixed(2)}KB → ${(distSize / 1024).toFixed(2)}KB (减少${reduction}%)` ); } } console.log('-' .repeat(70)); } catch (error) { console.error('验证图片优化效果时出错:', error); } } // 执行验证 compareImageSizes();