vite перестраивает dev-сервер при каждом http-запросе, что приводит к дублированию схемы graphql и мгновенному сбою сервера — сборка и производство работают, репо внутри

Я пытаюсь создать сервер graphql, используя nestjs и используя vite + swc в качестве компилятора/построителя по соображениям производительности, веб-пакет будет занимать 50-60+ секунд при каждой перестройке в большом проекте, SWC/vite, похоже, сокращает это на коэффициент не менее 5.

Вот репозиторий, который воспроизводит проблему с базовой конечной точкой «проверки работоспособности» и запросом graphql.

Основные инструменты по этому поводу:

          "@nestjs/graphql": "10.0.9",
    "@nestjs/apollo": "10.0.9",
    "typescript": "4.7.4",
    "vite-plugin-node": "1.0.0",
    "vite": "2.9.13",
    "@swc/core": "1.2.207",
    "vite-tsconfig-paths": "3.5.0"

Теперь я поиграл с этими фиксированными версиями, пробуя различные комбинации старых версий. Но я сузил недостаток, чтобы быть проблемой конкретно с vite.

эта проблема с github , которая, вероятно, имеет прямое отношение, а это всего лишь симптом этой проблемы.Более месяца назад была открыта

Если вы создаете приложение и обслуживаете его, все работает нормально, потому что производственная версия вызываетbootstrap()функция, которая не обрабатывается сервером разработки vite.

Это также проблема, специфичная для NestJS, из-за того, что NestJs использует подход «сначала код».

Я пытаюсь как-то исправить эту проблему, пытаясь сделать три вещи:

  • запретить серверу разработки перестраиваться при каждом запросе
  • настроить сервер разработки на очистку после себя при каждом запросе
  • настройте graphql в nestjs таким образом, чтобы схема строилась только 1 раз, что-то простое, например:
      let built = false;
if(!built) { buildSchema(); built = true; }

я рассчитываю на этоbuiltпеременная не меняется между запросами, но если это произойдет, я мог бы найти способ связать ее с командой запуска через файл вне области видимости vite.

Спасибо.

0 ответов

Другие вопросы по тегам