fix(deploy): vite.config импортируется по вычисляемому URL — esbuild без --splitting

esbuild без --splitting инлайнит статический import('../vite.config') в бандл
и поднимает его импорты (vite, @vitejs/plugin-react) на верхний уровень —
prod падал с ERR_MODULE_NOT_FOUND при старте. Динамический import по
вычисляемому URL esbuild не анализирует и оставляет рантайму (dev-only).

Проверено: dist/index.js содержит 0 статических импортов vite, бандл стартует,
подключается к БД и доходит до инициализации таблиц
This commit is contained in:
2026-09-07 21:33:58 +03:00
parent 9fc6ad1bd1
commit 5426c70f1f

View File

@@ -18,8 +18,12 @@ export function log(message: string, source = "express") {
export async function setupVite(app: Express, server: Server) {
// vite и vite.config — devDependencies: импортируем динамически, чтобы
// production-бандл (npm ci --omit=dev) не резолвил их при старте.
// Путь вычисляется рантаймом — esbuild без --splitting инлайнит статический
// import("../vite.config") в бандл и поднимает его импорты (vite, plugin-react)
// на верхний уровень, что роняет прод при старте.
const { createServer: createViteServer, createLogger } = await import("vite");
const { default: viteConfig } = await import("../vite.config");
const viteConfigUrl = new URL("../vite.config.ts", import.meta.url).href;
const { default: viteConfig } = await import(viteConfigUrl);
const viteLogger = createLogger();
const serverOptions = {
middlewareMode: true,