neuracss
Version:
50 lines (38 loc) • 1.55 kB
JavaScript
const fs = require('fs');
const path = require('path');
const postcss = require('postcss');
const atImport = require('postcss-import');
const classes = require('./src/classes');
const htmlFolder = path.join(__dirname, 'templates');
const outputCss = path.join(__dirname, 'dist/styles.css');
const baseCssPath = path.join(__dirname, 'src/base.css');
async function buildCss() {
const htmlFiles = fs.readdirSync(htmlFolder).filter(file => file.endsWith('.html'));
let usedClasses = new Set();
htmlFiles.forEach(file => {
const content = fs.readFileSync(path.join(htmlFolder, file), 'utf8');
const classMatches = [...content.matchAll(/class="([^"]+)"/g)];
classMatches.forEach(match => {
const classList = match[1].split(/\s+/);
classList.forEach(cls => usedClasses.add(cls));
});
});
let finalCss = '';
if (fs.existsSync(baseCssPath)) {
const baseCssContent = fs.readFileSync(baseCssPath, 'utf8');
const processedBaseCss = await postcss([atImport()]).process(baseCssContent, { from: baseCssPath });
finalCss += processedBaseCss.css + '\n';
}
usedClasses.forEach(cls => {
if (classes[cls]) {
finalCss += `.${cls} { ${classes[cls]} }\n`;
console.log(`✅ Added .${cls}`);
} else {
console.warn(`⚠️ Warning: class .${cls} not found in src/classes.js`);
}
});
fs.mkdirSync(path.dirname(outputCss), { recursive: true });
fs.writeFileSync(outputCss, finalCss);
console.log('🎉 Done! Generated dist/styles.css with used classes.');
}
buildCss();