rapharehap/scripts/optimize-images.mjs
2025-09-24 20:39:49 +05:30

48 lines
1.5 KiB
JavaScript

import imagemin from 'imagemin';
import imageminMozjpeg from 'imagemin-mozjpeg';
import imageminOptipng from 'imagemin-optipng';
import imageminWebp from 'imagemin-webp';
import imageminAvif from 'imagemin-avif';
import path from 'path';
const source = path.join(process.cwd(), 'public/images/*.{jpg,png}');
const destinationOptimized = path.join(process.cwd(), 'public/images-optimized');
const destinationWebP = path.join(process.cwd(), 'public/images-optimized/webp');
const destinationAvif = path.join(process.cwd(), 'public/images-optimized/avif');
(async () => {
try {
// Optimize JPEG / PNG
const filesOptimized = await imagemin([source], {
destination: destinationOptimized,
plugins: [
imageminMozjpeg({ quality: 90 }),
imageminOptipng({ optimizationLevel: 3 }),
],
});
console.log('JPEG/PNG optimized:', filesOptimized.map(f => f.destinationPath));
// Convert to WebP
const filesWebP = await imagemin([source], {
destination: destinationWebP,
plugins: [
imageminWebp({ quality: 80 }),
],
});
console.log('Converted to WebP:', filesWebP.map(f => f.destinationPath));
// Convert to AVIF
const filesAvif = await imagemin([source], {
destination: destinationAvif,
plugins: [
imageminAvif({ quality: 50 }),
],
});
console.log('Converted to AVIF:', filesAvif.map(f => f.destinationPath));
} catch (error) {
console.error('Error optimizing images:', error);
}
})();