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) {
|
export async function setupVite(app: Express, server: Server) {
|
||||||
// vite и vite.config — devDependencies: импортируем динамически, чтобы
|
// vite и vite.config — devDependencies: импортируем динамически, чтобы
|
||||||
// production-бандл (npm ci --omit=dev) не резолвил их при старте.
|
// production-бандл (npm ci --omit=dev) не резолвил их при старте.
|
||||||
|
// Путь вычисляется рантаймом — esbuild без --splitting инлайнит статический
|
||||||
|
// import("../vite.config") в бандл и поднимает его импорты (vite, plugin-react)
|
||||||
|
// на верхний уровень, что роняет прод при старте.
|
||||||
const { createServer: createViteServer, createLogger } = await import("vite");
|
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 viteLogger = createLogger();
|
||||||
const serverOptions = {
|
const serverOptions = {
|
||||||
middlewareMode: true,
|
middlewareMode: true,
|
||||||
|
|||||||
Reference in New Issue
Block a user