diff --git a/packages/vite/src/node/preview.ts b/packages/vite/src/node/preview.ts index c00f62a9cb8f0c..23b905fd01a719 100644 --- a/packages/vite/src/node/preview.ts +++ b/packages/vite/src/node/preview.ts @@ -1,4 +1,5 @@ import path from 'path' +import fs from 'fs' import sirv from 'sirv' import connect from 'connect' import compression from './server/middlewares/compression' @@ -90,11 +91,20 @@ export async function preview( config.base, sirv(distDir, { etag: true, - dev: true, - single: true + dev: true }) ) + app.use(config.base, (_, res, next) => { + const file = path.join(distDir, './404.html') + if (fs.existsSync(file)) { + res.statusCode = 404 + res.end(fs.readFileSync(file)) + } else { + next() + } + }) + const options = config.preview const hostname = resolveHostname(options.host) const port = options.port ?? 4173