0.2.2 • Published 8 months ago

@magne4000/vite-plugin-vercel-ssr v0.2.2

Weekly downloads
-
License
MIT
Repository
github
Last release
8 months ago

@magne4000/vite-plugin-vercel-ssr

vite-plugin-ssr integration for vite-plugin-vercel.

  • Versions 0.1.x are compatible with vite-plugin-ssr@0.4.x
  • Versions 0.0.x are compatible with vite-plugin-ssr@0.3.x

Features

Usage

Install this package as a dev dependency and add it to your Vite config like this:

// vite.config.ts
import { defineConfig } from 'vite';
import ssr from 'vite-plugin-ssr/plugin';
import vercel from 'vite-plugin-vercel';
import vercelSsr from '@magne4000/vite-plugin-vercel-ssr';

export default defineConfig(async ({ command, mode }) => {
  return {
    // `vercelSsr` MUST be after `ssr` and `vercel`
    plugins: [ssr(), vercel(), vercelSsr()],
  };
});

ISR/Prerender Functions

Official documentation: https://vercel.com/docs/build-output-api/v3#vercel-primitives/prerender-functions

Take any of your .page file (not .page.server) and add the following export:

// Now this page is a Prerender Function, meaning that it will be cached on Edge network for 15 seconds.
// Check official documentation for further details on how it works.
export const isr = { expiration: 15 };

:warning: Pages with route function are not compatible with ISR. A warning will be shown if this occurs.

Custom Serverless Function for vite-plugin-ssr

By default, a Serverless Function is created to handle all SSR routes. If for any reason you need to customize it, some tools are available:

import type { VercelRequest, VercelResponse } from '@vercel/node';
import { renderPage } from 'vite-plugin-ssr/server';
import {
  getDefaultEmptyResponseHandler,
  // higly recommended to use at least this one, as it handles some internals
  // that overrides `request.url`
  getDefaultPageContextInit,
  getDefaultResponseHandler,
} from '@magne4000/vite-plugin-vercel-ssr/helpers';

export default async function handler(
  request: VercelRequest,
  response: VercelResponse,
) {
  // pageContextInit.url is not necessarily equal to request.url.
  // It is required for `renderPage` to work properly.
  const pageContextInit = getDefaultPageContextInit(request);
  const pageContext = await renderPage(pageContextInit);
  const { httpResponse } = pageContext;

  if (!httpResponse) {
    return getDefaultEmptyResponseHandler(response);
  }

  return getDefaultResponseHandler(response, httpResponse);
}
0.2.1

10 months ago

0.2.2

8 months ago

0.2.0

12 months ago

0.1.5

1 year ago

0.1.4

1 year ago

0.1.0

2 years ago

0.1.2

2 years ago

0.1.1

2 years ago

0.0.9

2 years ago

0.0.8

2 years ago

0.0.5

2 years ago

0.1.3

2 years ago

0.0.7

2 years ago

0.0.6

2 years ago

0.0.4

2 years ago

0.0.3

2 years ago

0.0.2

2 years ago

0.0.1

2 years ago