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');