@@ -0,0 +1,56 @@
|
||||
const fs = require('fs');
|
||||
const postcss = require('postcss');
|
||||
const tailwindcss = require('tailwindcss');
|
||||
const autoprefixer = require('autoprefixer');
|
||||
const cssnano = require('cssnano');
|
||||
|
||||
const inputPath = './public/css/tailwind.css';
|
||||
const outputPath = './public/css/output.css';
|
||||
const isProduction = process.env.NODE_ENV === 'production';
|
||||
|
||||
async function buildCSS() {
|
||||
console.log('[CSS Build] Reading input file...');
|
||||
const css = fs.readFileSync(inputPath, 'utf8');
|
||||
|
||||
console.log(`[CSS Build] Processing with PostCSS and Tailwind... (${isProduction ? 'production' : 'development'} mode)`);
|
||||
|
||||
const plugins = [
|
||||
tailwindcss(),
|
||||
autoprefixer()
|
||||
];
|
||||
|
||||
// Only minify in production
|
||||
if (isProduction) {
|
||||
plugins.push(cssnano({
|
||||
preset: ['default', {
|
||||
discardComments: {
|
||||
removeAll: true,
|
||||
},
|
||||
normalizeWhitespace: true,
|
||||
}]
|
||||
}));
|
||||
}
|
||||
|
||||
const result = await postcss(plugins).process(css, {
|
||||
from: inputPath,
|
||||
to: outputPath,
|
||||
map: !isProduction ? { inline: false } : false
|
||||
});
|
||||
|
||||
console.log('[CSS Build] Writing output file...');
|
||||
fs.writeFileSync(outputPath, result.css);
|
||||
|
||||
if (result.map && !isProduction) {
|
||||
fs.writeFileSync(outputPath + '.map', result.map.toString());
|
||||
}
|
||||
|
||||
const sizeKB = (Buffer.byteLength(result.css, 'utf8') / 1024).toFixed(2);
|
||||
console.log('[CSS Build] ✓ CSS build complete!');
|
||||
console.log(`[CSS Build] Output: ${outputPath} (${sizeKB} KB)`);
|
||||
}
|
||||
|
||||
buildCSS().catch(err => {
|
||||
console.error('[CSS Build] Error:', err);
|
||||
process.exit(1);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user