2
0

render.mjs 899 B

123456789101112131415161718192021222324
  1. import fs from "fs"
  2. import path from "path"
  3. import { generateHydrationScript, getAssets } from "solid-js/web"
  4. const dist = import.meta.resolve("../dist").replace("file://", "")
  5. const serverEntry = await import("../dist/server/entry-server.js")
  6. const template = fs.readFileSync(path.join(dist, "client/index.html"), "utf-8")
  7. fs.writeFileSync(path.join(dist, "client/fallback.html"), template)
  8. const routes = ["/", "/foo"]
  9. for (const route of routes) {
  10. const { app } = serverEntry.render({ url: route })
  11. const html = template
  12. .replace("<!--ssr-outlet-->", app)
  13. .replace("<!--ssr-head-->", generateHydrationScript())
  14. .replace("<!--ssr-assets-->", getAssets())
  15. const filePath = dist + `/client${route === "/" ? "/index" : route}.html`
  16. fs.mkdirSync(path.dirname(filePath), {
  17. recursive: true,
  18. })
  19. fs.writeFileSync(filePath, html)
  20. console.log(`Pre-rendered: ${filePath}`)
  21. }