Начало
» Основни познания
»
Как да поправите грешката „Prisma Client has not been generated yet“
Как да поправите грешката „Prisma Client has not been generated yet“
Ако приложението ви се срива с Prisma Client has not been generated yet, най-бързата полезна реакция не е да изтриете всичко и да преинсталирате на сляпо. Първо определете кой генератор на Prisma Client използва проектът ви, генерирайте клиента от правилната схема и се уверете, че приложението ви импортира от мястото, което действително е било генерирано.
Има важен източник на объркване, свързан с версиите. Към септември 2026 г. документацията на Prisma 7 използва генератора prisma-client със задължителна директория output, а кодът на приложението импортира Prisma Client от този генериран път. По-стари и все още често срещани проекти използват prisma-client-js, където @prisma/client е нормалният импорт, а генерираните файлове, специфични за проекта, традиционно са се намирали под node_modules/.prisma/client. Смесването на тези два набора от инструкции може да ви остави с генериран клиент на едно място, докато кодът на приложението импортира друго. Официалното ръководство за генериране на Prisma Client документира текущото поведение на Prisma 7.
Бърза диагностика: какво обикновено означава грешката
Какво наблюдавате
Най-полезна проверка
Следващо действие
Грешката се появява веднага при импортиране или създаване на PrismaClient
Беше ли генериран клиентът за това копие на кода и тази схема?
Изпълнете npx prisma generate от правилния пакет.
prisma generate успява, но приложението все още хвърля грешката
Съответства ли вашият импорт на изхода на генератора?
Прегледайте блока на генератора и генерираната директория, след което коригирайте импорта.
Работи локално, но се проваля в CI или продукция
Изпълнява ли се генериране при изграждане, след като зависимостите и файловете на схемата са налични?
Добавете изрична стъпка за генериране към инсталацията или изграждането.
Приложение в монорепо не може да намери клиента
Кое работно пространство притежава schema.prisma и генерирания код?
Генерирайте в това работно пространство и го експортирайте/импортирайте последователно.
Самото генериране се проваля
Валидна ли е схемата и чете ли Prisma предвидената схема?
Изпълнете npx prisma validate, като първо отстраните грешките при валидация или път.
1. Прочетете грешката, преди да променяте зависимости
Потвърдената част е проста: Prisma Client е генериран код, съобразен с вашата схема. Ако по време на изпълнение се импортира входна точка на клиента, чиято генерирана реализация липсва, е остаряла или не е там, където импортът я очаква, стартирането може да се провали още преди първата ви заявка към базата данни.
Това, което само това съобщение не доказва, е, че базата данни е недостъпна, че идентификационните данни са грешни или че миграциите са се провалили. Тези условия могат да причинят други грешки на Prisma, но това конкретно съобщение ви насочва първо към генерирането и разрешаването на модули.
Действие: отбележете точния пакет, файл и път на импортиране в проследяването на стека. След това проверете блока на генератора в схемата, преди да преинсталирате каквото и да било.
Пример за грешката при стартиране на приложението. Третирайте я първо като проблем с генерирането на клиента или с пътя на импортиране, а не като доказателство за прекъсване на базата данни.
2. Определете вашия генератор и очаквания път за импортиране
Отворете prisma/schema.prisma или пътя до схемата, конфигуриран за вашия проект. Генераторът определя къде се създава Prisma Client и как трябва да го импортирате.
С този модел импортирайте от конфигурирания от вас изход, например:
import { PrismaClient } from "../generated/prisma/client";
Текущата документация на Prisma посочва, че output е задължителен за генератора prisma-client на Prisma 7 и че импортите идват от това генерирано място.
При тази по-стара подредба кодът на приложението обикновено използва:
import { PrismaClient } from "@prisma/client";
Действие: не променяйте импорта само защото даден урок използва различен генератор. Съобразете импорта с вашата собствена схема и версия.
Пример за схема в наследен стил prisma-client-js. В проекти с Prisma 7, използващи по-новия генератор prisma-client, дефинирайте изричен изходен път и импортирайте от това генерирано място.
3. Валидирайте схемата, след което генерирайте клиента
Преди генериране валидирайте схемата. Prisma предоставя prisma validate специално за проверка на синтаксиса и конфигурацията на схемата. Официалната справка за prisma validate също поддържа --schema за нестандартни местоположения на схемата.
Действие: прочетете крайния изход от prisma generate. Не предполагайте къде са записани файловете; използвайте пътя, който Prisma съобщава.
Изпълнете prisma generate от пакета, който притежава схемата, след което прочетете внимателно изходния ред, за да разберете къде е записан клиентът.
4. Проверете дали изходът съществува там, където кодът ви го очаква
Успешната команда е необходима, но средата за изпълнение също трябва да вижда същите файлове. Това става особено важно, когато инструментите за изграждане копират само част от хранилището, когато етап на Docker пропуска генерирания изход или когато монорепо изгражда един пакет, без първо да изгради пакета за базата данни.
За prisma-client прегледайте персонализираната директория output от схемата. За prisma-client-js прегледайте подредбата на инсталирания/генериран пакет Prisma, използвана от вашата версия. Не приемайте папката, показана в по-стар пример, за универсална.
Действие: сравнете едно до друго три неща: output на генератора, пътя, съобщен от prisma generate, и оператора за импортиране във файла, който се срива. Те трябва да описват един и същ генериран клиент.
За наследени проекти с prisma-client-js генерираните файлове обикновено се намират под node_modules. По-новите проекти с prisma-client използват персонализираната изходна директория, конфигурирана в schema.prisma.
5. Поправете импорта, вместо да генерирате безкрайно
Ако prisma generate успява всеки път, но същата грешка по време на изпълнение остава, повторното ѝ изпълнение едва ли ще помогне. Следващият въпрос е дали приложението ви импортира генерирания модул, който току-що сте създали.
За генератора prisma-client на Prisma 7 текущата документация показва импортиране от персонализирания генериран път. За проект с prisma-client-js@prisma/client е очакваният пакетен импорт. Тази разлика е една от най-честите причини текущите и по-старите примери да изглеждат противоречиви.
Действие: потърсете в хранилището си всеки импорт на PrismaClient. При миграция или монорепо един пакет може да бъде обновен, докато друг все още импортира стария път.
Импортът трябва да съответства на генератора, който действително използвате: @prisma/client за наследени настройки с prisma-client-js или конфигурирания от вас генериран изходен път за генератора prisma-client на Prisma 7.
6. Проверете версиите на пакетите Prisma, когато проектът е бил обновен
Несъответствието на версиите е причина, зависеща от обстоятелствата, а не нещо, което тази грешка доказва сама по себе си. Въпреки това ръководствата за обновяване на Prisma инструктират разработчиците да обновяват както CLI пакета prisma, така и @prisma/client, когато преминават към основни версии. Официалното ръководство за обновяване до Prisma 7 показва как двата пакета се обновяват заедно.
Проверете какво всъщност е инсталирано:
npm ls prisma @prisma/client
С pnpm или Yarn използвайте еквивалентната команда за списък за работното пространство, което притежава Prisma. Ако проектът умишлено остава на Prisma 6 или друга поддържана версия, не обновявайте само за да изчистите това съобщение. Съобразете пакетите с версията, която проектът ви очаква, след което генерирайте отново.
Действие: ако версиите са станали несъвместими след сливане или обновяване на зависимости, възстановете предвидените съвпадащи версии и изпълнете prisma generate отново.
7. Направете генерирането част от инсталацията или изграждането
Когато дадено приложение работи на машината на разработчика, но се проваля след внедряване, липсващата стъпка често е в процеса на изграждане, а не в кода на приложението. Документацията на Prisma за отстраняване на проблеми с Next.js изрично препоръчва генериране на Prisma Client при всяко внедряване, когато кеширането на зависимости може да попречи на генерирането по време на инсталация да се изпълни както се очаква.
Действие: прегледайте логовете на CI и потвърдете, че prisma generate се е изпълнил, след като правилната схема и зависимости са били налични, и преди групирането или стартирането на сървъра.
Добавянето на изрична стъпка за генериране към скриптовете на пакета прави локалните изграждания и поведението на CI по-предвидими. Поддържайте точната команда съвместима с вашия мениджър на пакети и подредбата на проекта.
8. Рестартирайте процеса след генериране
Сървърите за разработка, изпълнителите на тестове и работните процеси могат да задържат модули, заредени в паметта. Генерирането на файлове на диска не гарантира, че процес, който вече се е провалил при импортиране, ще ги зареди автоматично.
Действие: спрете и рестартирайте сървъра за разработка, работния процес или тестовия процес след успешно генериране. Ако приложението сега премине към друга грешка, свързана с базата данни или конфигурацията, това е полезно доказателство, че самият проблем с генерирането на клиента е решен.
Рестартирайте процеса след генериране, за да може средата за изпълнение да презареди генерирания модул, вместо да задържи неуспешен или остарял импорт в паметта.
Монорепа: генерирайте в пакета, който притежава схемата
В работно пространство изпълнението на npx prisma generate от корена на хранилището не е автоматично равностойно на генериране вътре в пакета за базата данни. Откриването на схемата, конфигурационните файлове, зависимостите и относителните изходни пътища могат да се различават според пакета.
Генерирайте от packages/database, експортирайте клиента от този пакет и накарайте приложенията да зависят от пакета, вместо да достигат до частната генерирана директория на друго работно пространство.
Действие: направете задачата за изграждане или генериране на пакета за база данни изрична зависимост на всяко приложение, което го импортира.
Трябва ли да изтриете node_modules?
Не като първа стъпка. Изтриването на node_modules може да поправи повредена инсталация, но може също да прикрие истинския проблем, като принуди много несвързани пакети да се променят наведнъж. Ако валидацията на схемата успее и генерирането съобщи правилния изход, първо проверете импортите, версиите на пакетите и пътищата за изграждане.
Чистата преинсталация става разумна, когато метаданните на пакетите са несъвместими, генерираният изход очевидно е остарял след промени в зависимостите или мениджърът на пакети съобщава проблеми с инсталацията.
Действие: запишете изхода от npm ls prisma @prisma/client и от prisma generate, преди да почистите. Това ви дава доказателства за сравнение след преинсталиране.
Какво не ви казва тази грешка
Сама по себе си тя не доказва, че базата ви данни е недостъпна. Първо поправете генерирането/разрешаването на импортирането, след което оценете всяка останала грешка при свързване.
Не доказва, че липсват миграции. Генерирането на Prisma Client и миграцията на схемата на базата данни са свързани работни процеси, но не са една и съща операция.
Не означава, че всеки проект трябва да импортира от @prisma/client. Това зависи от генератора и версията на Prisma.
Не означава, че преинсталирането на зависимости винаги е необходимо. Правилното prisma generate плюс правилния път за импортиране често е достатъчно.
Контролен списък за предотвратяване
Изпълнявайте prisma validate, когато схемата или конфигурацията на генератора се променят.
Изпълнявайте prisma generate след промени в схемата и след изтегляне на промени, които засягат API на генерирания клиент.
Поддържайте импорта по време на изпълнение съобразен с конфигурирания изход на генератора.
Поддържайте версиите на prisma и @prisma/client съобразени, когато избраната от вас версия на Prisma използва и двата пакета.
В CI и продукция изпълнявайте генерирането изрично преди изграждане/стартиране, когато кеширането на зависимости може да го пропусне.
В монорепа генерирайте в работното пространство, което притежава схемата, и излагайте клиента чрез стабилна граница на пакета.
Рестартирайте дълго изпълняващите се процеси за разработка след генериране на преди това липсващ клиент.
За платформи за внедряване, които кешират зависимости, изпълнявайте prisma generate изрично по време на инсталация или изграждане, вместо да предполагате, че предишен генериран клиент все още е актуален.
Заключение
Надеждното решение е кратка верига от доказателства: идентифицирайте вашия генератор на Prisma, валидирайте предвидената схема, генерирайте клиента, проверете действителния изходен път и накарайте импорта си да съответства на този изход. Ако проблемът се появява само в CI или продукция, преместете същата стъпка за генериране в работния процес за изграждане. Ако се появява в монорепо, направете генерирането отговорност на пакета, който притежава схемата.
Този подход е по-надежден от многократното изтриване на зависимости, защото ви казва кой слой е бил грешен: избор на схема, генериране, версии на пакетите, разрешаване на импортирането или опаковане при внедряване.