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:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user