#!/bin/bash set -e echo "🚀 Starting production build with full optimization..." # Check if dependencies are installed if [ ! -d "node_modules" ] || [ ! -f "node_modules/rollup/dist/rollup.js" ]; then echo "📦 Dependencies not found. Installing dependencies first..." ./setup-dependencies.sh fi # Step 1: Build JavaScript bundles with Rollup echo "📦 Building and optimizing JavaScript bundles..." npm run build:js # Step 2: Run Hugo build with minification echo "🏗️ Building site with Hugo..." hugo --minify -d public # Step 3: Process JavaScript files echo "🔧 Processing JavaScript..." ./optimize-js.sh # Step 4: Optimize CSS echo "🎨 Optimizing CSS..." if [ -d "public/css" ]; then mkdir -p public/css/optimized # Process CSS files with CSSO echo "Processing CSS files..." for CSS_FILE in public/css/vendor/*.css public/css/*.css; do if [ -f "$CSS_FILE" ]; then FILENAME=$(basename "$CSS_FILE") echo "Optimizing $FILENAME..." npx csso "$CSS_FILE" -o "public/css/optimized/$FILENAME" # Calculate savings ORIGINAL_SIZE=$(wc -c < "$CSS_FILE") OPTIMIZED_SIZE=$(wc -c < "public/css/optimized/$FILENAME") SAVINGS=$((100 - (OPTIMIZED_SIZE * 100 / ORIGINAL_SIZE))) echo "$FILENAME: $ORIGINAL_SIZE bytes -> $OPTIMIZED_SIZE bytes ($SAVINGS% saved)" fi done # Update HTML files to reference optimized CSS echo "Updating CSS references in HTML files..." find public -name "*.html" -type f -exec sed -i '' 's|/css/vendor/|/css/optimized/|g' {} \; find public -name "*.html" -type f -exec sed -i '' 's|/css/app.min.css|/css/optimized/app.min.css|g' {} \; find public -name "*.html" -type f -exec sed -i '' 's|/css/custom.css|/css/optimized/custom.css|g' {} \; fi # Final optimization report echo "" echo "✅ Production build complete!" echo "📊 Output is in the 'public' directory" # Get directory sizes JS_SIZE=$(du -sh public/js | cut -f1) CSS_SIZE=$(du -sh public/css | cut -f1) TOTAL_SIZE=$(du -sh public | cut -f1) echo "" echo "📊 Site Size Report:" echo "- JavaScript: $JS_SIZE" echo "- CSS: $CSS_SIZE" echo "- Total site: $TOTAL_SIZE"