Files
parenthese/landing/scripts/prerender.mjs
T
IliesAllaliandClaude Opus 5.5 70af00e636 Landing prérendue à la compilation et textes orientés arbre généalogique
- Textes de la landing (pastille, lede, H2 des étapes, de la démo et des guides, Pour qui)
  et métadonnées og/twitter/JSON-LD sans « galaxie »
- npm run build fait le build client, un build SSR (src/entry-server.jsx, renderToString)
  puis scripts/prerender.mjs injecte le HTML dans dist/index.html ; hydrateRoot côté client
- Rendu serveur sans accès window : source et isMobile posés après montage
- noscript rend visibles les blocs data-reveal sans JavaScript
- App : robots.txt en Allow pour que la meta noindex soit lue

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-25 11:41:47 +02:00

22 lines
1.0 KiB
JavaScript

// Injecte le HTML de la landing, rendu par React à la compilation, dans dist/index.html.
// Lancé par `npm run build` après le build client (dist/) et le build SSR (dist-ssr/).
import { readFile, rm, writeFile } from 'node:fs/promises'
import { fileURLToPath, pathToFileURL } from 'node:url'
const root = fileURLToPath(new URL('..', import.meta.url))
const indexPath = `${root}dist/index.html`
const ssrDir = `${root}dist-ssr`
const MARKER = '<div id="root"></div>'
const { render } = await import(pathToFileURL(`${ssrDir}/entry-server.js`).href)
const appHtml = render()
if (!appHtml || !appHtml.includes('<h1')) throw new Error('Prérendu vide ou sans H1')
const template = await readFile(indexPath, 'utf8')
if (!template.includes(MARKER)) throw new Error(`${MARKER} introuvable dans dist/index.html`)
await writeFile(indexPath, template.replace(MARKER, `<div id="root">${appHtml}</div>`))
await rm(ssrDir, { recursive: true, force: true })
console.log(`Prérendu injecté dans dist/index.html (${Math.round(appHtml.length / 1024)} Ko de HTML)`)