ShowerLoop-cc/docker/showerloop/public/build-production.sh

66 lines
2.1 KiB
Bash
Executable File

#!/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"