File size: 3,705 Bytes
95aa6cf 98ace4c 20c5151 95aa6cf 98ace4c 95aa6cf 98ace4c 20c5151 98ace4c 20c5151 98ace4c 20c5151 95aa6cf 98ace4c 20c5151 98ace4c 20c5151 98ace4c 20c5151 98ace4c 20c5151 98ace4c 95aa6cf 20c5151 95aa6cf 20c5151 95aa6cf 20c5151 95aa6cf 20c5151 95aa6cf 29f93aa 95aa6cf 29f93aa 95aa6cf 20c5151 98ace4c 95aa6cf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
// 🗜️ Script de Minificação de Código
// Minifica JavaScript e CSS para reduzir o tamanho do bundle
const fs = require('fs');
const path = require('path');
console.log('🗜️ MINIFICAÇÃO DE CÓDIGO\n');
console.log('═'.repeat(80));
// Função para minificar JavaScript (básica)
function minifyJS(code) {
return code
// Remove comentários de uma linha
.replace(/\/\/.*$/gm, '')
// Remove comentários multi-linha
.replace(/\/\*[\s\S]*?\*\//g, '')
// Remove espaços extras
.replace(/\s+/g, ' ')
// Remove espaços antes e depois de operadores
.replace(/\s*([{};,:\[\]()=+\-*\/])\s*/g, '$1')
// Remove linhas vazias
.replace(/\n\s*\n/g, '\n')
.trim();
}
// Função para minificar CSS (básica)
function minifyCSS(code) {
return code
// Remove comentários
.replace(/\/\*[\s\S]*?\*\//g, '')
// Remove espaços extras
.replace(/\s+/g, ' ')
// Remove espaços ao redor de : ; { }
.replace(/\s*([{}:;,])\s*/g, '$1')
// Remove última vírgula antes de }
.replace(/;}/g, '}')
.trim();
}
// Função para calcular economia
function calculateSavings(original, minified) {
const saved = original - minified;
const percentage = ((saved / original) * 100).toFixed(2);
return { saved, percentage };
}
// Função para formatar bytes
function formatBytes(bytes) {
return (bytes / 1024).toFixed(2) + ' KB';
}
// Minificar app.js
console.log('\n📄 Minificando app.js...');
try {
const appJsOriginal = fs.readFileSync('public/app.js', 'utf8');
const appJsMinified = minifyJS(appJsOriginal);
fs.writeFileSync('public/app.min.js', appJsMinified);
const savings = calculateSavings(appJsOriginal.length, appJsMinified.length);
console.log(` Original: ${formatBytes(appJsOriginal.length)}`);
console.log(` Minificado: ${formatBytes(appJsMinified.length)}`);
console.log(` ✅ Economizou: ${formatBytes(savings.saved)} (${savings.percentage}%)`);
} catch (error) {
console.log(` ❌ Erro: ${error.message}`);
}
// Minificar styles.css
console.log('\n📄 Minificando styles.css...');
try {
const cssOriginal = fs.readFileSync('public/styles.css', 'utf8');
const cssMinified = minifyCSS(cssOriginal);
fs.writeFileSync('public/styles.min.css', cssMinified);
const savings = calculateSavings(cssOriginal.length, cssMinified.length);
console.log(` Original: ${formatBytes(cssOriginal.length)}`);
console.log(` Minificado: ${formatBytes(cssMinified.length)}`);
console.log(` ✅ Economizou: ${formatBytes(savings.saved)} (${savings.percentage}%)`);
} catch (error) {
console.log(` ❌ Erro: ${error.message}`);
}
// Minificar sw.js
console.log('\n📄 Minificando sw.js...');
try {
const swJsOriginal = fs.readFileSync('public/sw.js', 'utf8');
const swJsMinified = minifyJS(swJsOriginal);
fs.writeFileSync('public/sw.min.js', swJsMinified);
const savings = calculateSavings(swJsOriginal.length, swJsMinified.length);
console.log(` Original: ${formatBytes(swJsOriginal.length)}`);
console.log(` Minificado: ${formatBytes(swJsMinified.length)}`);
console.log(` ✅ Economizou: ${formatBytes(savings.saved)} (${savings.percentage}%)`);
} catch (error) {
console.log(` ❌ Erro: ${error.message}`);
}
console.log('\n' + '═'.repeat(80));
console.log('\n✅ Minificação concluída!');
console.log('📝 Nota: Para produção, use ferramentas profissionais como Terser e cssnano\n');
console.log('💡 Próximo passo: Configurar compressão Gzip/Brotli no servidor\n');
|