52 lines
1.7 KiB
JavaScript
52 lines
1.7 KiB
JavaScript
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();
|