Skip to main content

Coralite Scripts

coralite-scripts is the official development and build tool for Coralite projects. It provides a complete development environment with live reloading, hot CSS updates, and a production build system optimized for static site generation.

Table of Contents #

Overview #

coralite-scripts provides two main modes of operation:

Development Mode

Start a local server with live reload, hot CSS injection, and real-time file watching. Perfect for rapid development.

Build Mode

Compile your site for production with optimized HTML, CSS, and static assets.

Key Features #

Installation & Setup #

Install coralite-scripts as a dev dependency in your Coralite project:

bash
Code copied!
  npm install --save-dev coralite-scripts

Project Structure #

Ensure your project follows the standard Coralite structure:

text
Code copied!
  my-coralite-site/
  β”œβ”€β”€ src/
  β”‚   β”œβ”€β”€ pages/        # Page templates (.html)
  β”‚   β”œβ”€β”€ templates/    # Reusable components
  β”‚   └── scss/         # Sass/SCSS files
  β”œβ”€β”€ public/           # Static assets
  β”œβ”€β”€ coralite.config.js # Configuration file
  └── package.json      # Scripts & dependencies

package.json Scripts #

Add the following scripts to your package.json:

json
Code copied!
  {
    "scripts": {
      "dev": "coralite-scripts dev",
      "build": "coralite-scripts build",
      "start": "coralite-scripts dev"
    }
  }

Configuration File #

Create coralite.config.js in your project root:

javascript
Code copied!
  import { defineConfig } from 'coralite-scripts'
  
  export default defineConfig({
    output: './dist',
    public: './public',
    pages: './src/pages',
    templates: './src/templates',
    styles: {
      type: 'scss',
      input: './src/scss'
    },
    server: {
      port: 3000
    }
  })

Configuration Reference #

The defineConfig() function validates and returns your configuration object. All properties are required unless marked as optional.

Required Properties #

Property Type Description
output string Output directory for compiled site (e.g., './dist')
public string Directory containing static assets to copy to output
pages string Directory containing page templates (.html files)
templates string Directory containing reusable template components

Optional Properties #

Property Type Description
server.port number Development server port (default: 3000)
styles.type 'css' | 'sass' | 'scss' Style processing type
styles.input string Directory containing style files to compile
sassOptions Options Additional Sass compiler options
cssPlugins AcceptedPlugin[] PostCSS plugins array
plugins CoralitePluginInstance[] Coralite plugin instances

Configuration Validation #

The defineConfig() function performs validation and will throw errors for:

CLI Commands #

coralite-scripts provides two main commands for development and production builds.

Development Server #

Start the development server with live reload and hot CSS updates:

bash
Code copied!
  npm run dev
  # or
  coralite-scripts dev

Options

What It Does

  1. Initializes Coralite with your configuration
  2. Compiles Sass/SCSS if configured
  3. Starts Express server on configured port
  4. Watches for file changes in pages, templates, and styles directories
  5. Injects live reload scripts into HTML pages
  6. Serves static assets from public directory

Production Build #

Build your site for production deployment:

bash
Code copied!
  npm run build
  # or
  coralite-scripts build

What It Does

  1. Cleans the output directory
  2. Compiles all pages with Coralite
  3. Saves rendered HTML to output directory
  4. Copies static assets from public directory
  5. Compiles Sass/SCSS to CSS with source maps
  6. Optimizes output for production

Development Server Features #

Live Reload #

Automatic browser refresh when files change:

Hot CSS Updates #

Instant CSS injection without page refresh:

File Watching #

Monitors the following directories for changes:

Request Logging #

Real-time terminal output showing:

Server-Sent Events (SSE) #

The development server provides a /_/rebuild endpoint that clients can connect to for real-time updates. The server sends two types of messages:

Build Process #

The production build process is optimized for performance and clean output.

Build Steps #

  1. Clean Output - Deletes existing output directory
  2. Compile HTML - Processes all pages with Coralite
  3. Save Documents - Writes rendered HTML to disk
  4. Copy Assets - Copies static files from public directory
  5. Compile Styles - Processes Sass/SCSS or CSS
  6. Generate Source Maps - Creates .map files for debugging

Sass Compilation #

When styles.type is set to 'sass' or 'scss':

CSS Processing #

When styles.type is set to 'css':

API Reference #

defineConfig(options) #

Defines and validates the Coralite configuration for your project.

javascript
Code copied!
  import { defineConfig } from 'coralite-scripts'
  
  const config = defineConfig({
    output: './dist',
    public: './public',
    pages: './src/pages',
    templates: './src/templates',
    styles: {
      type: 'scss',
      input: './src/scss'
    },
    server: {
      port: 3000
    },
    // Coralite plugins
    plugins: [
      // Your plugin instances
    ],
    // Sass options
    sassOptions: {
      // Custom Sass compiler options
    },
    // PostCSS plugins
    cssPlugins: [
      // Your PostCSS plugins
    ]
  })

Parameters

Parameter Type Required Description
options CoraliteScriptConfig Yes Configuration object with required and optional properties

Returns

CoraliteScriptConfig - The validated configuration object

Throws

Validation Rules #

Property Validation Rule Error Message
output Must be non-empty string "Configuration must contain a valid "output" property"
templates Must be non-empty string "Configuration must contain a valid "templates" property"
pages Must be non-empty string "Configuration must contain a valid "pages" property"
public Must be non-empty string "Configuration must contain a valid "public" property"
server.port Must be positive number "Configuration "server.port" must be a positive number"
styles.type Must be 'css', 'sass', or 'scss' "Configuration "styles.type" must be equal to either "css", "sass" or "scss"
styles.input Must be non-empty string "Configuration "styles.input" must be a string"

Examples #

Basic Setup #

Minimal configuration for a standard Coralite site:

javascript
Code copied!
  import { defineConfig } from 'coralite-scripts'
  
  export default defineConfig({
    output: './dist',
    public: './public',
    pages: './src/pages',
    templates: './src/templates'
  })

Sass/SCSS Support #

Configure Sass compilation with custom options:

javascript
Code copied!
  import { defineConfig } from 'coralite-scripts'
  
  export default defineConfig({
    output: './dist',
    public: './public',
    pages: './src/pages',
    templates: './src/templates',
    styles: {
      type: 'scss',
      input: './src/scss'
    },
    sassOptions: {
      sourceMap: true,
      loadPaths: ['node_modules', 'src/scss'],
      silenceDeprecations: ['color-functions', 'import']
    }
  })

With Coralite Plugins #

Integrate Coralite plugins with coralite-scripts:

javascript
Code copied!
  import { defineConfig } from 'coralite-scripts'
  import { defineComponent } from 'coralite/plugins'
  
  export default defineConfig({
    output: './dist',
    public: './public',
    pages: './src/pages',
    templates: './src/templates',
    styles: {
      type: 'scss',
      input: './src/scss'
    },
    plugins: [
      defineComponent({
        // Your component definition
      })
    ]
  })

PostCSS Integration #

Use PostCSS plugins for CSS processing:

javascript
Code copied!
  import { defineConfig } from 'coralite-scripts'
  import autoprefixer from 'autoprefixer'
  import cssnano from 'cssnano'
  
  export default defineConfig({
    output: './dist',
    public: './public',
    pages: './src/pages',
    templates: './src/templates',
    styles: {
      type: 'css',
      input: './src/css'
    },
    cssPlugins: [
      autoprefixer(),
      cssnano()
    ]
  })

Custom Development Port #

Configure a custom port for the development server:

javascript
Code copied!
  import { defineConfig } from 'coralite-scripts'
  
  export default defineConfig({
    output: './dist',
    public: './public',
    pages: './src/pages',
    templates: './src/templates',
    server: {
      port: 8080
    }
  })

Complete Configuration #

Full-featured configuration with all options:

javascript
Code copied!
  import { defineConfig } from 'coralite-scripts'
  import { defineComponent, defineCollection } from 'coralite/plugins'
  import autoprefixer from 'autoprefixer'
  
  export default defineConfig({
    // Required paths
    output: './dist',
    public: './public',
    pages: './src/pages',
    templates: './src/templates',
    
    // Style processing
    styles: {
      type: 'scss',
      input: './src/scss'
    },
    
    // Sass options
    sassOptions: {
      sourceMap: true,
      loadPaths: ['node_modules'],
      silenceDeprecations: ['import']
    },
    
    // PostCSS plugins
    cssPlugins: [
      autoprefixer()
    ],
    
    // Development server
    server: {
      port: 3000
    },
    
    // Coralite plugins
    plugins: [
      defineComponent({
        // Component definitions
      }),
      defineCollection({
        // Collection definitions
      })
    ]
  })

Troubleshooting #

Development Server Issues #

Server won't start

Problem: Port already in use

Solution: Change the port in your config or kill the process using the port:

bash
Code copied!
  lsof -i :3000
  kill -9 [PID]

Live reload not working

Problem: Browser not receiving SSE messages

Solutions:

Hot CSS not updating

Problem: CSS changes not reflected without page reload

Solutions:

Build Issues #

Build fails with errors

Problem: Compilation errors during build

Solutions:

Output directory not created

Problem: Build completes but no output

Solutions:

Configuration Issues #

Config validation errors

Problem: defineConfig() throws validation errors

Solutions:

Plugins not loading

Problem: Coralite plugins not recognized

Solutions:

Performance Issues #

Slow compilation times

Problem: Long wait times for changes to reflect

Solutions:

High memory usage

Problem: Development server consuming too much memory

Solutions:

Common Error Messages #

text
Code copied!
  Error: Configuration must be a valid object
  β†’ Ensure you're passing an object to defineConfig()
  
  Error: Configuration must contain a valid "output" property
  β†’ Add the required 'output' property to your config
  
  Error: Configuration "server.port" must be a positive number
  β†’ Check that server.port is a number greater than 0
  
  Error: Configuration "styles.type" must be equal to either "css", "sass" or "scss"
  β†’ Use one of the supported style types
  
  Error: Failed to start server
  β†’ Check if port is available and required dependencies are installed

Best Practices #

Development Workflow #

  1. Use relative paths - Keep all paths relative to project root
  2. Organize Sass - Use partials for reusable styles
  3. Monitor logs - Watch terminal for compilation times and errors
  4. Test frequently - Use live reload to see changes instantly
  5. Keep public clean - Only include static assets in public directory

Production Builds #

  1. Clean builds - Always delete output directory before building
  2. Version control - Don't commit output directory
  3. Test locally - Run build and test output before deploying
  4. Optimize assets - Use PostCSS plugins for minification
  5. Check permissions - Ensure build output has correct permissions

Configuration Management #

  1. Environment variables - Use different configs for dev/prod if needed
  2. Version control - Commit coralite.config.js to repository
  3. Documentation - Comment complex configurations
  4. Validation - Let defineConfig() catch configuration errors early

Integration with Other Tools #

Git #

Add to .gitignore:

text
Code copied!
  dist/
  node_modules/
  *.log

VS Code #

Recommended extensions:

CI/CD #

Example build script:

bash
Code copied!
  npm ci
  npm run build
  # Deploy dist/ directory

Performance Optimization #

Development #

Production #

Resources #

Start Building with Coralite!

Use the scaffolding script to get jump started into your next project with Coralite