Skip to content

Commit

Permalink
reproduce wrong early hints for HTML-only (#1574)
Browse files Browse the repository at this point in the history
  • Loading branch information
brillout committed Mar 24, 2024
1 parent 88004fe commit bb9d810
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 2 deletions.
8 changes: 6 additions & 2 deletions examples/render-modes/package.json
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
{
"scripts": {
"dev": "vite",
"dev": "npm run server:dev",
"prod": "npm run build && npm run server:prod",
"build": "vite build",
"preview": "vite build && vite preview"
"server:dev": "node ./server",
"server:prod": "cross-env NODE_ENV=production node ./server"
},
"dependencies": {
"@vitejs/plugin-react": "^4.2.1",
"compression": "^1.7.4",
"express": "^4.18.1",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"vite": "^5.0.10",
Expand Down
54 changes: 54 additions & 0 deletions examples/render-modes/server/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
// This file isn't processed by Vite, see https://github.com/vikejs/vike/issues/562
// Consequently:
// - When changing this file, you needed to manually restart your server for your changes to take effect.
// - To use your environment variables defined in your .env files, you need to install dotenv, see https://vike.dev/env
// - To use your path aliases defined in your vite.config.js, you need to tell Node.js about them, see https://vike.dev/path-aliases

import express from 'express'
import compression from 'compression'
import { renderPage } from 'vike/server'
import { root } from './root.js'
const isProduction = process.env.NODE_ENV === 'production'

startServer()

async function startServer() {
const app = express()

app.use(compression())

if (isProduction) {
const sirv = (await import('sirv')).default
app.use(sirv(`${root}/dist/client`))
} else {
const vite = await import('vite')
const viteDevMiddleware = (
await vite.createServer({
root,
server: { middlewareMode: true }
})
).middlewares
app.use(viteDevMiddleware)
}

app.get('*', async (req, res, next) => {
const pageContextInit = {
urlOriginal: req.originalUrl
}
const pageContext = await renderPage(pageContextInit)
const { httpResponse } = pageContext
if (!httpResponse) {
return next()
} else {
const { statusCode, headers, earlyHints } = httpResponse
if (res.writeEarlyHints) res.writeEarlyHints({ link: earlyHints.map((e) => e.earlyHintLink) })
headers.forEach(([name, value]) => res.setHeader(name, value))
res.status(statusCode)
httpResponse.pipe(res)
}
})

const port = process.env.PORT || 3000
app.listen(port)
console.log(`Server running at http://localhost:${port}`)
}
8 changes: 8 additions & 0 deletions examples/render-modes/server/root.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
export { root }

// https://stackoverflow.com/questions/46745014/alternative-for-dirname-in-node-when-using-the-experimental-modules-flag/50052194#50052194

import { dirname } from 'path'
import { fileURLToPath } from 'url'
const __dirname = dirname(fileURLToPath(import.meta.url))
const root = `${__dirname}/..`
6 changes: 6 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit bb9d810

Please sign in to comment.