Files
odoo-expertos.com/minify-assets.js
T
2026-08-28 10:11:11 -03:00

84 lines
3.1 KiB
JavaScript

const fs = require('fs');
const path = require('path');
// Simple CSS minification function
function minifyCSS(css) {
return css
// Remove comments
.replace(/\/\*[\s\S]*?\*\//g, '')
// Remove unnecessary whitespace
.replace(/\s+/g, ' ')
// Remove whitespace around selectors
.replace(/\s*([{}:;,])\s*/g, '$1')
// Remove trailing semicolons before closing braces
.replace(/;}/g, '}')
// Remove quotes from url()
.replace(/url\(["']?([^"')]+)["']?\)/g, 'url($1)')
.trim();
}
// Simple JS minification function
function minifyJS(js) {
// Skip minification if already minified (contains .min in content)
if (js.includes('.min')) return js;
return js
// Remove single-line comments (but preserve URLs)
.replace(/([^:])\/\/[^\n]*/g, '$1')
// Remove multi-line comments
.replace(/\/\*[\s\S]*?\*\//g, '')
// Remove unnecessary whitespace
.replace(/\s+/g, ' ')
// Remove whitespace around operators
.replace(/\s*([{}:;,=+\-*/<>!&|])\s*/g, '$1')
.trim();
}
// Process CSS files
console.log('Minifying CSS files...');
const cssDir = path.join(__dirname, 'css');
const cssFiles = fs.readdirSync(cssDir).filter(f => f.endsWith('.css') && !f.includes('.min.'));
cssFiles.forEach(file => {
const filePath = path.join(cssDir, file);
const content = fs.readFileSync(filePath, 'utf8');
const minified = minifyCSS(content);
const minPath = path.join(cssDir, file.replace('.css', '.min.css'));
fs.writeFileSync(minPath, minified);
const originalSize = Buffer.byteLength(content, 'utf8');
const minifiedSize = Buffer.byteLength(minified, 'utf8');
const saved = originalSize - minifiedSize;
const percent = ((saved / originalSize) * 100).toFixed(1);
console.log(`✓ ${file}: ${originalSize}${minifiedSize} bytes (saved ${saved} bytes, ${percent}%)`);
});
// Process JS files in components directory
console.log('\nMinifying JavaScript files...');
const jsDirectories = ['components', 'js'];
jsDirectories.forEach(dir => {
const jsDir = path.join(__dirname, dir);
if (!fs.existsSync(jsDir)) return;
const jsFiles = fs.readdirSync(jsDir).filter(f => f.endsWith('.js') && !f.includes('.min.'));
jsFiles.forEach(file => {
const filePath = path.join(jsDir, file);
const content = fs.readFileSync(filePath, 'utf8');
const minified = minifyJS(content);
const minPath = path.join(jsDir, file.replace('.js', '.min.js'));
fs.writeFileSync(minPath, minified);
const originalSize = Buffer.byteLength(content, 'utf8');
const minifiedSize = Buffer.byteLength(minified, 'utf8');
const saved = originalSize - minifiedSize;
const percent = ((saved / originalSize) * 100).toFixed(1);
console.log(`✓ ${dir}/${file}: ${originalSize}${minifiedSize} bytes (saved ${saved} bytes, ${percent}%)`);
});
});
console.log('\nMinification complete!');
console.log('Update your HTML files to use the .min versions for production.');