scripts/prerender.js (25 lines of code) (raw):
import { createServer as createViteServer } from 'vite'
import path from 'path';
import fs from 'fs';
const atomName = process.env.ATOM_NAME;
export function prerender(options = {}) {
const plugin = {
name: 'vite-plugin-prerender',
apply: 'build',
async generateBundle() {
const vite = await createViteServer({
server: { middlewareMode: true },
appType: 'custom'
});
const { render } = await vite.ssrLoadModule(path.join(atomName, 'app.prerender.js'));
const mainHTML = await render();
this.emitFile({
type: 'asset',
fileName: 'main.html',
source: mainHTML
});
vite.close();
},
};
return plugin;
}