fix(deploy): prod-бандл без devDependencies — динамический импорт vite в setupVite
Шаги 0.5/0.2 плана production-готовности (досрочно ушли с a54ec77):
- Dockerfile: npm ci --omit=dev вместо копирования node_modules из builder,
пользователь app (USER app), HOME=/tmp, npm_config_cache=/tmp/.npm
- docker/Dockerfile.documents: USER app, HOME=/tmp
- server/vite.ts: vite и vite.config импортируются динамически внутри setupVite —
иначе prod-бандл падал с ERR_MODULE_NOT_FOUND (@vitejs/plugin-react)
- package.json: vitest/supertest/@types/* (16 пакетов) перенесены
в devDependencies — именно vitest в dependencies тянул vite/esbuild/tsx в прод-образ
Проверено локально: образ собирается, uid=1001(app), /app/data доступна на запись,
бандл стартует без devDeps (падает только на отсутствии JWT-секретов окружения)
This commit is contained in:
@@ -1,13 +1,9 @@
|
||||
import express, { type Express } from "express";
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
import { createServer as createViteServer, createLogger } from "vite";
|
||||
import { type Server } from "http";
|
||||
import viteConfig from "../vite.config";
|
||||
import { nanoid } from "nanoid";
|
||||
|
||||
const viteLogger = createLogger();
|
||||
|
||||
export function log(message: string, source = "express") {
|
||||
const formattedTime = new Date().toLocaleTimeString("en-US", {
|
||||
hour: "numeric",
|
||||
@@ -20,6 +16,11 @@ export function log(message: string, source = "express") {
|
||||
}
|
||||
|
||||
export async function setupVite(app: Express, server: Server) {
|
||||
// vite и vite.config — devDependencies: импортируем динамически, чтобы
|
||||
// production-бандл (npm ci --omit=dev) не резолвил их при старте.
|
||||
const { createServer: createViteServer, createLogger } = await import("vite");
|
||||
const { default: viteConfig } = await import("../vite.config");
|
||||
const viteLogger = createLogger();
|
||||
const serverOptions = {
|
||||
middlewareMode: true,
|
||||
hmr: { server },
|
||||
|
||||
Reference in New Issue
Block a user