66 lines
2.1 KiB
Bash
Executable File
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" |