Fix: Invalid Prerender Export in Astro

Error message:
Invalid prerender export.
Build & Compilation 2025-01-25

What Causes This Error?

This error occurs when you use the prerender export incorrectly. The prerender export must be export const prerender = true or export const prerender = false.

The Problem

---
// ❌ Using let instead of const
export let prerender = false;

// ❌ Not a boolean
export const prerender = 'false';

// ❌ Function instead of value
export const prerender = () => false;

// ❌ Variable export
const shouldPrerender = false;
export { shouldPrerender as prerender };
---

The Fix

Use Correct Syntax

---
// ✅ Static prerendering (default behavior)
export const prerender = true;
---
---
// ✅ Server-side rendering
export const prerender = false;
---

Common Scenarios

Server-Rendered Page

---
// src/pages/dashboard.astro
// ✅ Correct - renders on each request
export const prerender = false;

const user = await getUser(Astro.cookies.get('session'));
---

<h1>Welcome, {user.name}</h1>

Static Page (Default)

---
// src/pages/about.astro
// ✅ Correct - built at build time
export const prerender = true;

// Note: prerender = true is the default, so this is optional
---

<h1>About Us</h1>

API Endpoints

// src/pages/api/data.ts
// ✅ Correct for API routes
export const prerender = false;

export async function GET() {
  return Response.json({ data: 'dynamic' });
}

In Hybrid Mode

// astro.config.mjs
export default defineConfig({
  output: 'hybrid', // Static by default, SSR opt-in
});
---
// src/pages/static-page.astro
// Static by default in hybrid mode - no export needed
---

---
// src/pages/dynamic-page.astro
// ✅ Opt into SSR
export const prerender = false;
---

In Server Mode

// astro.config.mjs
export default defineConfig({
  output: 'server', // SSR by default, static opt-in
});
---
// src/pages/dynamic-page.astro
// SSR by default in server mode - no export needed
---

---
// src/pages/static-page.astro
// ✅ Opt into prerendering
export const prerender = true;
---

Dynamic Value Not Allowed

---
// ❌ Cannot use runtime values
const isDev = import.meta.env.DEV;
export const prerender = isDev;

// ✅ Must be static boolean literal
export const prerender = false;
---

In TypeScript Files

// src/pages/api/route.ts

// ✅ Type is inferred correctly
export const prerender = false;

// ✅ Or explicitly typed
export const prerender: boolean = false;

Multiple Exports

---
// ✅ prerender alongside other exports
export const prerender = false;

export function getStaticPaths() {
  // Only used when prerender = true
  return [{ params: { id: '1' } }];
}
---

Quick Checklist

  • Use export const prerender = true/false
  • Value must be boolean true or false
  • Cannot use variables or functions
  • Must use const, not let
  • Default depends on output mode in config