| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- #!/bin/bash
- set -e
- echo "📦 Bundling React app to single HTML artifact..."
- # Check if we're in a project directory
- if [ ! -f "package.json" ]; then
- echo "❌ Error: No package.json found. Run this script from your project root."
- exit 1
- fi
- # Check if index.html exists
- if [ ! -f "index.html" ]; then
- echo "❌ Error: No index.html found in project root."
- echo " This script requires an index.html entry point."
- exit 1
- fi
- # Install bundling dependencies
- echo "📦 Installing bundling dependencies..."
- pnpm add -D parcel @parcel/config-default parcel-resolver-tspaths html-inline
- # Create Parcel config with tspaths resolver
- if [ ! -f ".parcelrc" ]; then
- echo "🔧 Creating Parcel configuration with path alias support..."
- cat > .parcelrc << 'EOF'
- {
- "extends": "@parcel/config-default",
- "resolvers": ["parcel-resolver-tspaths", "..."]
- }
- EOF
- fi
- # Clean previous build
- echo "🧹 Cleaning previous build..."
- rm -rf dist bundle.html
- # Build with Parcel
- echo "🔨 Building with Parcel..."
- pnpm exec parcel build index.html --dist-dir dist --no-source-maps
- # Inline everything into single HTML
- echo "🎯 Inlining all assets into single HTML file..."
- pnpm exec html-inline dist/index.html > bundle.html
- # Get file size
- FILE_SIZE=$(du -h bundle.html | cut -f1)
- echo ""
- echo "✅ Bundle complete!"
- echo "📄 Output: bundle.html ($FILE_SIZE)"
- echo ""
- echo "You can now use this single HTML file as an artifact in Claude conversations."
- echo "To test locally: open bundle.html in your browser"
|