mirror of
https://github.com/Dvorinka/ClubLogos.git
synced 2026-06-03 19:42:58 +00:00
fff
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const { optimize } = require('svgo');
|
||||
const { promisify } = require('util');
|
||||
const readdir = promisify(fs.readdir);
|
||||
const readFile = promisify(fs.readFile);
|
||||
const writeFile = promisify(fs.writeFile);
|
||||
const stat = promisify(fs.stat);
|
||||
|
||||
// SVGO configuration
|
||||
const svgoConfig = {
|
||||
multipass: true,
|
||||
plugins: [
|
||||
'preset-default',
|
||||
{
|
||||
name: 'removeViewBox',
|
||||
active: false,
|
||||
},
|
||||
{
|
||||
name: 'addAttributesToSVGElement',
|
||||
params: {
|
||||
attributes: [{ 'data-optimized': 'true' }],
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
async function optimizeSvg(filePath) {
|
||||
try {
|
||||
const svg = await readFile(filePath, 'utf8');
|
||||
const result = optimize(svg, { path: filePath, ...svgoConfig });
|
||||
|
||||
if (result.error) {
|
||||
console.error(`Error optimizing ${filePath}:`, result.error);
|
||||
return false;
|
||||
}
|
||||
|
||||
await writeFile(filePath, result.data);
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.error(`Error processing ${filePath}:`, error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
async function processDirectory(directory) {
|
||||
try {
|
||||
const entries = await readdir(directory, { withFileTypes: true });
|
||||
|
||||
for (const entry of entries) {
|
||||
const fullPath = path.join(directory, entry.name);
|
||||
|
||||
if (entry.isDirectory()) {
|
||||
await processDirectory(fullPath);
|
||||
} else if (entry.name.endsWith('.svg')) {
|
||||
const stats = await stat(fullPath);
|
||||
const beforeSize = stats.size;
|
||||
|
||||
console.log(`Optimizing: ${fullPath}`);
|
||||
const success = await optimizeSvg(fullPath);
|
||||
|
||||
if (success) {
|
||||
const afterStats = await stat(fullPath);
|
||||
const afterSize = afterStats.size;
|
||||
const saved = beforeSize - afterSize;
|
||||
const savedPercent = ((saved / beforeSize) * 100).toFixed(2);
|
||||
|
||||
console.log(` ✓ Optimized: ${(beforeSize / 1024).toFixed(2)}KB → ${(afterSize / 1024).toFixed(2)}KB (saved ${savedPercent}%)`);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(`Error reading directory ${directory}:`, error);
|
||||
}
|
||||
}
|
||||
|
||||
// Get directories from command line arguments or use default
|
||||
const directories = process.argv.slice(2).length > 0
|
||||
? process.argv.slice(2)
|
||||
: [
|
||||
path.join(__dirname, '..', 'data', 'logos'),
|
||||
path.join(__dirname, '..', 'frontend', 'dist', 'img')
|
||||
];
|
||||
|
||||
// Run optimization
|
||||
(async () => {
|
||||
console.log('🚀 Starting SVG optimization...\n');
|
||||
|
||||
for (const dir of directories) {
|
||||
console.log(`📂 Processing directory: ${dir}`);
|
||||
await processDirectory(dir);
|
||||
}
|
||||
|
||||
console.log('\n✨ SVG optimization complete!');
|
||||
})();
|
||||
Reference in New Issue
Block a user