mirror of
https://github.com/IliesAllali/parenthese.git
synced 2026-11-12 16:16:09 +00:00
- 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>
22 lines
1.0 KiB
JavaScript
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)`)
|