// vite build(클라이언트) + vite build --ssr(서버) 이후 실행. // dist/server/entry-server.js 의 render()로 랜딩 HTML을 만들어 dist/index.html 의 #root 에 주입한다. import { readFileSync, writeFileSync, rmSync } from 'node:fs'; import { resolve } from 'node:path'; const dist = resolve(process.cwd(), 'dist'); const template = readFileSync(resolve(dist, 'index.html'), 'utf-8'); const { render } = await import(resolve(dist, 'server/entry-server.js')); const routes = ['/']; for (const url of routes) { const appHtml = render(url); const html = template.replace('
', `
${appHtml}
`); const out = url === '/' ? 'index.html' : `${url.replace(/^\//, '')}/index.html`; writeFileSync(resolve(dist, out), html); const words = appHtml.replace(/<[^>]*>/g, ' ').split(/\s+/).filter(Boolean).length; console.log(`[prerender] ${url} -> dist/${out} (${words} words)`); } rmSync(resolve(dist, 'server'), { recursive: true, force: true });