From bbf126dd4b5464ec4f2b571640329bae1811c658 Mon Sep 17 00:00:00 2001 From: Bjorn Lu Date: Sat, 18 Feb 2023 20:08:56 +0800 Subject: [PATCH] feat(preview): improve error when build output missing (#12096) --- packages/vite/src/node/preview.ts | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/vite/src/node/preview.ts b/packages/vite/src/node/preview.ts index aeeef7132846d8..a9fe3d1894aed8 100644 --- a/packages/vite/src/node/preview.ts +++ b/packages/vite/src/node/preview.ts @@ -1,3 +1,4 @@ +import fs from 'node:fs' import path from 'node:path' import type * as http from 'node:http' import sirv from 'sirv' @@ -84,6 +85,21 @@ export async function preview( 'production', ) + const distDir = path.resolve(config.root, config.build.outDir) + if ( + !fs.existsSync(distDir) && + // error if no plugins implement `configurePreviewServer` + config.plugins.every((plugin) => !plugin.configurePreviewServer) && + // error if called in CLI only. programmatic usage could access `httpServer` + // and affect file serving + process.argv[1]?.endsWith(path.normalize('bin/vite.js')) && + process.argv[2] === 'preview' + ) { + throw new Error( + `The directory "${config.build.outDir}" does not exist. Did you build your project?`, + ) + } + const app = connect() as Connect.Server const httpServer = await resolveHttpServer( config.preview, @@ -116,7 +132,6 @@ export async function preview( config.base === './' || config.base === '' ? '/' : config.base // static assets - const distDir = path.resolve(config.root, config.build.outDir) const headers = config.preview.headers const assetServer = sirv(distDir, { etag: true,