@analogjs/vite-plugin-nitro
A lightweight Vite plugin for integrating with Nitro to enable:
- Runtime Server Side Rendering
- Build-time Pre-rendering
- Static Site Generation
- API routes
Install
npm install @analogjs/vite-plugin-nitro --save-dev
Setup
Add the nitro
plugin to the plugins
array in the Vite config.
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import nitro from '@analogjs/vite-plugin-nitro';
export default defineConfig({
plugins: [
react(),
nitro({
ssr: true,
entryServer: 'src/main.server.tsx',
prerender: {
routes: ['/'],
},
}),
],
});
SSR Setup
Define a src/main.server.ts(x)
file to declare how to render the application on the server.
Below is a minimal example for SSR w/React:
import React from 'react';
import ReactDOMServer from 'react-dom/server';
import App from './App';
export default async function render(_url: string, document: string) {
const html = ReactDOMServer.renderToString(
<React.StrictMode>
<App />
</React.StrictMode>
);
return document.replace('<!--app-html-->', html);
}
Also setup the placeholder to be replaced in the index.html
:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Vite + React + Nitro</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>
Examples
React: https://github.com/brandonroberts/vite-nitro-react
SolidJS: https://github.com/brandonroberts/vite-nitro-solid
Vue: https://github.com/brandonroberts/vite-nitro-vue