You're Invited:Meet the Socket Team at BlackHat and DEF CON in Las Vegas, Aug 4-6.RSVP
Socket
Book a DemoInstallSign in
Socket

vite-plugin-html-prerender

Package Overview
Dependencies
Maintainers
1
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

vite-plugin-html-prerender - npm Package Compare versions

Comparing version

to
0.0.3

dist/renderer.d.ts

2

dist/prerender.d.ts
import type { Plugin } from "vite";
import { HtmlPrerenderOptions } from "./types";
declare function htmlPrerender(options: HtmlPrerenderOptions): Plugin;
declare const htmlPrerender: (options: HtmlPrerenderOptions) => Plugin;
export default htmlPrerender;

@@ -6,8 +6,6 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
const server_1 = __importDefault(require("./server"));
const renderer_1 = __importDefault(require("./renderer"));
const html_minifier_1 = require("html-minifier");
const path_1 = __importDefault(require("path"));
const fs_1 = __importDefault(require("fs"));
const Prerenderer = require("@prerenderer/prerenderer");
const PuppeteerRenderer = require("@prerenderer/renderer-puppeteer");
function htmlPrerender(options) {
const htmlPrerender = (options) => {
return {

@@ -21,48 +19,40 @@ name: "vite-plugin-html-prerender",

};
}
function emitRendered(options) {
const prerenderer = new Prerenderer({
...options,
renderer: new PuppeteerRenderer()
});
prerenderer.initialize().then(() => {
console.log(`[vite-plugin-html-prerender] Pre-rendering routes (${options.routes})...`);
return prerenderer.renderRoutes(options.routes);
}).then((renderedRoutes) => {
// NOTE: Minify html files
console.log("[vite-plugin-html-prerender] All routes rendered successfully.");
if (!options.minify) {
return renderedRoutes;
};
const emitRendered = (options) => {
const port = 17581;
const server = new server_1.default(port);
const renderer = new renderer_1.default(port);
server.init(options.staticDir).then(async () => {
console.log("\n[vite-plugin-html-prerender] Starting headless browser...");
return renderer.init();
}).then(async () => {
const renderedRoutes = [];
for (let route of options.routes) {
console.log("[vite-plugin-html-prerender] Pre-rendering route:", route);
renderedRoutes.push(await renderer.renderRoute(route));
}
console.log("[vite-plugin-html-prerender] Minifying rendered html files...");
renderedRoutes.forEach(route => {
route.html = (0, html_minifier_1.minify)(route.html, options.minify);
});
return renderedRoutes;
}).then((renderedRoutes) => {
// NOTE: Set the output paths
return renderedRoutes.map(route => {
route.output = path_1.default.join(options.staticDir, route.route, "index.html");
return route;
});
}).then((renderedRoutes) => {
// NOTE: Write files to output directory
renderedRoutes.forEach(route => {
fs_1.default.mkdir(path_1.default.dirname(route.output), { recursive: true }, () => {
console.log(`Appending file [${route.route}]`);
fs_1.default.writeFile(route.output, route.html, error => {
if (error) {
throw error;
}
});
}).then(renderedRoutes => {
if (options.minify) {
console.log("[vite-plugin-html-prerender] Minifying rendered HTML...");
renderedRoutes.forEach(route => {
route.html = (0, html_minifier_1.minify)(route.html, options.minify);
});
});
}).then(() => {
prerenderer.destroy();
console.log("[vite-plugin-html-prerender] Completed.");
}).catch((err) => {
prerenderer.destroy();
console.error("[vite-plugin-html-prerender] Failed to prerender routes: ", err);
}
return renderedRoutes;
}).then(async (renderedRoutes) => {
console.log("[vite-plugin-html-prerender] Saving pre-rendered routes to output...");
for (let renderedRoute of renderedRoutes) {
await renderer.saveToFile(options.staticDir, renderedRoute);
}
}).then(async () => {
await renderer.destroy();
await server.destroy();
console.log("[vite-plugin-html-prerender] Pre-rendering routes completed.");
}).catch(async (e) => {
await renderer.destroy();
await server.destroy();
console.error("[vite-plugin-html-prerender] Failed to prerender routes:", e);
});
}
};
exports.default = htmlPrerender;

@@ -17,6 +17,5 @@ import { Options } from "html-minifier";

}
export type RenderedRoutes = Array<{
export type RenderedRoute = {
route: string;
html: string;
output: string;
}>;
};
{
"name": "vite-plugin-html-prerender",
"version": "0.0.2",
"version": "0.0.3",
"description": "Vite.js plugin for pre-rendering html for SPAs.",

@@ -29,7 +29,8 @@ "main": "dist/index.js",

"dependencies": {
"@prerenderer/prerenderer": "^0.7.2",
"@prerenderer/renderer-puppeteer": "^0.2.0",
"html-minifier": "^4.0.0"
"express": "^4.18.2",
"html-minifier": "^4.0.0",
"puppeteer": "^19.6.3"
},
"devDependencies": {
"@types/express": "^4.17.17",
"@types/html-minifier": "^4.0.2",

@@ -36,0 +37,0 @@ "@types/node": "^18.11.18",

# vite-plugin-html-prerender
Vite.js plugin for pre-rendering html for SPAs.
## Install
```shell
npm i -D vite-plugin-html-prerender
```
## Usage
Add `htmlPrerender` to your configuration (`vite.config.js`/`vite.config.ts`):
```typescript
import { defineConfig } from "vite";
import { htmlPrerender } from "vite-plugin-html-prerender";
import path from "path";
export default defineConfig({
plugins: [
htmlPrerender({
/**
* Required: Output directory of "vite build"
*/
staticDir: path.join(__dirname, "dist"),
/**
* Required: List of routes to pre-render.
*/
routes: ["/", "/about"],
/**
* Optional: To minify html. Uses https://github.com/kangax/html-minifier.
*/
minify: {
collapseBooleanAttributes: true,
collapseWhitespace: true,
decodeEntities: true,
keepClosingSlash: true,
sortAttributes: true
}
})
]
});
```