Skip to content

Vercel Deployment

Deploy EreoJS applications to Vercel with Node.js or Edge runtime support.

Installation

bash
bun add @ereo/deploy-vercel

Overview

The @ereo/deploy-vercel package provides utilities to configure EreoJS applications for Vercel deployment. It supports:

  • Node.js Runtime - Traditional serverless functions using @vercel/node
  • Edge Runtime - Lightweight functions running at the edge using @vercel/edge

API Reference

Exports

The package exports the following:

ExportTypeDescription
vercelFunctionGenerate EreoJS framework configuration
generateVercelJsonFunctionGenerate vercel.json content
generateBuildScriptFunctionGenerate bash build script
VercelConfigInterfaceConfiguration type definition
defaultFunctionDefault export (same as vercel)

vercel(config?)

Generates EreoJS framework configuration for Vercel deployment.

Signature

typescript
function vercel(config?: VercelConfig): Partial<FrameworkConfig>

Parameters

ParameterTypeRequiredDescription
configVercelConfigNoConfiguration options

Returns

Returns a partial FrameworkConfig object with the build target set:

typescript
{
  build: {
    target: 'node' | 'edge'
  }
}

Examples

Default Configuration (Node.js)

typescript
import { defineConfig } from '@ereo/core';
import { vercel } from '@ereo/deploy-vercel';

export default defineConfig({
  ...vercel()
});

// Equivalent to:
// { build: { target: 'node' } }

Edge Runtime

typescript
import { defineConfig } from '@ereo/core';
import { vercel } from '@ereo/deploy-vercel';

export default defineConfig({
  ...vercel({ edge: true })
});

// Equivalent to:
// { build: { target: 'edge' } }

Using Default Export

typescript
import vercel from '@ereo/deploy-vercel';

export default defineConfig({
  ...vercel({ edge: true })
});

generateVercelJson(config)

Generates a vercel.json configuration file as a formatted JSON string.

Signature

typescript
function generateVercelJson(config: VercelConfig): string

Parameters

ParameterTypeRequiredDescription
configVercelConfigYesConfiguration options

Returns

Returns a formatted JSON string suitable for writing to vercel.json.

Generated Structure

The function generates a Vercel configuration with:

  • version: Always 2
  • builds: Single build entry for dist/server.js
  • routes: Catch-all route directing to the server
  • regions: Included if specified in config
  • functions: Added for Edge runtime only

Examples

Node.js Runtime

typescript
import { generateVercelJson } from '@ereo/deploy-vercel';

const json = generateVercelJson({});
console.log(json);

Output:

json
{
  "version": 2,
  "builds": [
    {
      "src": "dist/server.js",
      "use": "@vercel/node",
      "config": {
        "includeFiles": ["dist/**"]
      }
    }
  ],
  "routes": [
    {
      "src": "/(.*)",
      "dest": "dist/server.js"
    }
  ]
}

Edge Runtime with Regions

typescript
import { generateVercelJson } from '@ereo/deploy-vercel';

const json = generateVercelJson({
  edge: true,
  regions: ['iad1', 'sfo1', 'fra1']
});
console.log(json);

Output:

json
{
  "version": 2,
  "builds": [
    {
      "src": "dist/server.js",
      "use": "@vercel/edge",
      "config": {
        "includeFiles": ["dist/**"]
      }
    }
  ],
  "routes": [
    {
      "src": "/(.*)",
      "dest": "dist/server.js"
    }
  ],
  "regions": ["iad1", "sfo1", "fra1"],
  "functions": {
    "dist/server.js": {
      "runtime": "edge",
      "regions": ["iad1", "sfo1", "fra1"]
    }
  }
}

Writing to File

typescript
import { generateVercelJson } from '@ereo/deploy-vercel';

const config = generateVercelJson({
  edge: true,
  regions: ['iad1']
});

await Bun.write('vercel.json', config);

generateBuildScript()

Generates a bash build script for Vercel deployment.

Signature

typescript
function generateBuildScript(): string

Parameters

None.

Returns

Returns a bash script string that:

  1. Sets strict error handling (set -e)
  2. Installs dependencies with bun install
  3. Builds the application with bun run build
  4. Copies static assets from public/ to dist/public/

Generated Script

bash
#!/bin/bash
# Vercel build script for EreoJS framework

set -e

echo "Building for Vercel..."

# Install dependencies
bun install

# Build the application
bun run build

# Copy static assets to dist
mkdir -p dist/public
cp -r public/* dist/public/ 2>/dev/null || true

echo "Build complete!"

Example

typescript
import { generateBuildScript } from '@ereo/deploy-vercel';

const script = generateBuildScript();
await Bun.write('build.sh', script);

// Make executable (via CLI)
// chmod +x build.sh

VercelConfig Interface

Configuration options for Vercel deployment.

Definition

typescript
interface VercelConfig {
  /** Use Vercel Edge runtime (default: false = Node.js) */
  edge?: boolean;

  /** Deployment regions */
  regions?: string[];

  /** Function timeout in seconds (reserved - not yet implemented) */
  timeout?: number;

  /** Memory allocation in MB (reserved - not yet implemented) */
  memory?: number;

  /** Environment variables (reserved - not yet implemented) */
  env?: Record<string, string>;
}

Properties

PropertyTypeDefaultUsed ByDescription
edgebooleanfalsevercel(), generateVercelJson()When true, configures for Edge runtime
regionsstring[]undefinedgenerateVercelJson()Array of Vercel region codes
timeoutnumber-Not yet implementedReserved for function timeout
memorynumber-Not yet implementedReserved for memory allocation
envRecord<string, string>-Not yet implementedReserved for environment variables

Note: The timeout, memory, and env options are defined in the interface for future compatibility but are not currently used by any functions.

Vercel Regions

Common Vercel region codes:

CodeLocation
iad1Washington, D.C., USA
sfo1San Francisco, USA
fra1Frankfurt, Germany
hnd1Tokyo, Japan
syd1Sydney, Australia

See Vercel Regions documentation for full list.


Deployment Guide

Step 1: Install the Package

bash
bun add @ereo/deploy-vercel

Step 2: Configure EreoJS

typescript
// ereo.config.ts
import { defineConfig } from '@ereo/core';
import { vercel } from '@ereo/deploy-vercel';

export default defineConfig({
  ...vercel({
    edge: false  // or true for Edge runtime
  })
});

Step 3: Generate vercel.json

typescript
// scripts/generate-vercel-config.ts
import { generateVercelJson } from '@ereo/deploy-vercel';

const config = generateVercelJson({
  edge: false,
  regions: ['iad1']
});

await Bun.write('vercel.json', config);
console.log('Generated vercel.json');

Run:

bash
bun run scripts/generate-vercel-config.ts

Step 4: Build and Deploy

bash
# Build the application
bun run build

# Deploy to Vercel (preview)
vercel deploy

# Deploy to production
vercel deploy --prod

Runtime Comparison

FeatureNode.js (edge: false)Edge (edge: true)
Vercel Builder@vercel/node@vercel/edge
Maximum Timeout900 seconds30 seconds
Memory Range128 MB - 3008 MB1024 MB - 4096 MB
Node.js APIsFull supportLimited (Web APIs)
File SystemAvailableNot available
Cold StartSlowerFaster
Global DeploymentPer-regionEdge network

When to Use Node.js Runtime

  • Need full Node.js API support
  • Long-running operations (up to 15 minutes)
  • File system operations
  • Heavy computation

When to Use Edge Runtime

  • Low-latency requirements
  • Simple request/response handling
  • Geolocation-based logic
  • Authentication/authorization middleware

Package Scripts

Recommended package.json scripts:

json
{
  "scripts": {
    "dev": "bun run --watch src/index.ts",
    "build": "bun run build",
    "deploy": "vercel deploy",
    "deploy:prod": "vercel deploy --prod",
    "generate:vercel": "bun run scripts/generate-vercel-config.ts"
  }
}

Troubleshooting

Build Output Location

The generated configuration expects your build output at dist/server.js. Ensure your build process outputs to this location.

Missing Regions

If regions is not specified, Vercel uses its default region selection. For explicit control:

typescript
generateVercelJson({
  regions: ['iad1']  // Explicitly set regions
});

Edge Runtime Functions Block

The functions block in vercel.json is only added when edge: true. For Node.js runtime, configure function settings directly in Vercel's dashboard or manually add to vercel.json.

Static Assets

The generated build script copies files from public/ to dist/public/. Ensure your static assets are in the public/ directory.


Dependencies

This package depends on:

  • @ereo/core - For the FrameworkConfig type

Released under the MIT License.