new site
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
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.');
|
||||
Reference in New Issue
Block a user