From 2f7a44bf441d3229954f9c92e317b22a75f28173 Mon Sep 17 00:00:00 2001 From: Ryan Christian Date: Sat, 4 Jan 2025 22:10:43 -0600 Subject: [PATCH] revert: Support `previewMiddlewareEnabled` yet --- README.md | 1 + src/index.ts | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1e64e4a..e70ab14 100644 --- a/README.md +++ b/README.md @@ -78,6 +78,7 @@ preact({ | `renderTarget` | `string` | `"body"` | Query selector for where to insert prerender result in your HTML template | | `prerenderScript` | `string` | `undefined` | Absolute path to script containing exported `prerender()` function. If not provided, will try to find the prerender script in the scripts listed in your HTML entrypoint | | `additionalPrerenderRoutes` | `string[]` | `undefined` | Prerendering will crawl your site automatically, but you'd like to prerender some pages that may not be found (such as a `/404` page), use this option to specify them | +| `previewMiddlewareEnabled` | `boolean` | `false` | Vite's preview server as of v5 will not use our prerendered HTML documents automatically. This option enables a middleware that will correct this, allowing you to test the result of prerendering locally | | `previewMiddlewareFallback` | `string` | `/index.html` | Fallback path to be used when an HTML document cannot be found via the preview middleware, e.g., `/404` or `/not-found` will be used when the user requests `/some-path-that-does-not-exist` | To prerender your app, you'll need to do these things: diff --git a/src/index.ts b/src/index.ts index 627eca1..145ffc6 100644 --- a/src/index.ts +++ b/src/index.ts @@ -64,6 +64,10 @@ export interface PreactPluginOptions { * Additional routes that should be prerendered */ additionalPrerenderRoutes?: string[]; + /** + * Vite's preview server won't use our prerendered HTML by default, this middleware correct this + */ + previewMiddlewareEnabled?: boolean; /** * Path to use as a fallback/404 route, i.e., `/404` or `/not-found` */ @@ -141,6 +145,16 @@ function preactPlugin({ reactAliasesEnabled = reactAliasesEnabled ?? true; prerender = prerender ?? { enabled: false }; + const prerenderPlugin = vitePrerenderPlugin(prerender); + if (!prerender.previewMiddlewareEnabled) { + const idx = prerenderPlugin.findIndex( + p => p.name == "serve-prerendered-html", + ); + if (idx > -1) { + prerenderPlugin.splice(idx, 1); + } + } + const jsxPlugin: Plugin = { name: "vite:preact-jsx", enforce: "pre", @@ -271,7 +285,7 @@ function preactPlugin({ ...(prefreshEnabled ? [prefresh({ include, exclude, parserPlugins: baseParserOptions })] : []), - ...(prerender.enabled ? [vitePrerenderPlugin(prerender)] : []), + ...(prerender.enabled ? prerenderPlugin : []), ]; }