Kaip ištaisyti klaidą „Prisma Client has not been generated yet“
Jei jūsų programa sugenda su Prisma Client has not been generated yet, greičiausias naudingas veiksmas nėra visko ištrinti ir aklai perinstaliuoti. Pirmiausia nustatykite, kurį „Prisma Client“ generatorių naudoja jūsų projektas, sugeneruokite klientą iš teisingos schemos ir įsitikinkite, kad jūsų programa importuoja iš tos vietos, kuri iš tikrųjų buvo sugeneruota.
Yra svarbus su versija susijęs painiavos šaltinis. Kaip patikrinta 2026 m. rugsėjį, „Prisma 7“ dokumentacija naudoja prisma-client generatorių su privalomu output katalogu, o programos kodas importuoja „Prisma Client“ iš to sugeneruoto kelio. Senesni ir vis dar dažni projektai naudoja prisma-client-js, kur @prisma/client yra įprastas importas, o sugeneruoti projektui būdingi failai tradiciškai būdavo node_modules/.prisma/client kataloge. Sumaišius šiuos du instrukcijų rinkinius, galite gauti sugeneruotą klientą vienoje vietoje, o programos kodą importuojantį iš kitos. Oficialus „Prisma Client“ generavimo vadovas aprašo dabartinį „Prisma 7“ veikimą.
Greita diagnostika: ką ši klaida paprastai reiškia
Ką pastebite
Naudingiausias patikrinimas
Tolesnis veiksmas
Klaida pasirodo iškart importuojant ar konstruojant PrismaClient
Ar klientas buvo sugeneruotas šiam kodui ir schemai?
Paleiskite npx prisma generate iš teisingo paketo.
prisma generate pavyksta, bet programa vis tiek meta klaidą
Ar jūsų importas atitinka generatoriaus išvestį?
Patikrinkite generatoriaus bloką ir sugeneruotą katalogą, tada pataisykite importą.
Veikia lokaliai, bet nepavyksta CI ar produkcijoje
Ar kūrimas paleidžia generavimą po to, kai priklausomybės ir schemos failai yra prieinami?
Pridėkite aiškų generavimo veiksmą prie diegimo ar kūrimo.
Monorepo programa negali rasti kliento
Kuri darbo sritis valdo schema.prisma ir sugeneruotą kodą?
Generuokite toje darbo srityje ir eksportuokite/importuokite nuosekliai.
Pats generavimas nepavyksta
Ar schema galioja ir ar „Prisma“ skaito numatytą schemą?
Paleiskite npx prisma validate, pirmiausia ištaisydami validavimo ar kelio klaidas.
1. Perskaitykite gedimą prieš keisdami priklausomybes
Patvirtinta dalis yra paprasta: „Prisma Client“ yra sugeneruotas kodas, pritaikytas jūsų schemai. Jei vykdymo aplinka importuoja kliento įėjimo tašką, kurio sugeneruota implementacija nėra, pasenusi arba yra ne ten, kur tikisi importas, paleidimas gali nepavykti dar prieš pirmą užklausą duomenų bazei.
Tai, ko vien šis pranešimas neįrodo, yra tai, kad jūsų duomenų bazė neveikia, kredencialai neteisingi ar migracijos nepavyko. Šios sąlygos gali sukelti kitas „Prisma“ klaidas, bet šis konkretus pranešimas pirmiausia nukreipia jus į generavimą ir modulių sprendimą.
Veiksmas: užsirašykite tikslų paketą, failą ir importo kelią klaidų sekos steke. Tada patikrinkite generatoriaus bloką schemoje prieš ką nors perinstaliuodami.
Klaidos pavyzdys paleidžiant programą. Pirmiausia traktuokite tai kaip kliento generavimo ar importo kelio problemą, o ne kaip duomenų bazės sutrikimo įrodymą.
2. Nustatykite savo generatorių ir numatomą importo kelią
Atidarykite prisma/schema.prisma arba schemos kelią, sukonfigūruotą jūsų projektui. Generatorius nustato, kur sukuriamas „Prisma Client“ ir kaip turėtumėte jį importuoti.
Naudojant šį šabloną, importuokite iš sukonfigūruotos išvesties, pavyzdžiui:
import { PrismaClient } from "../generated/prisma/client";
Dabartinė „Prisma“ dokumentacija teigia, kad output yra privalomas „Prisma 7“ prisma-client generatoriui ir kad importai ateina iš tos sugeneruotos vietos.
Šioje senesnėje struktūroje programos kodas paprastai naudoja:
import { PrismaClient } from "@prisma/client";
Veiksmas: nekeiskite importo vien todėl, kad mokymo medžiaga naudoja kitą generatorių. Suderinkite importą su savo schema ir versija.
Seno stiliaus „prisma-client-js“ schemos pavyzdys. „Prisma 7“ projektuose, naudojančiuose naujesnį „prisma-client“ generatorių, nurodykite aiškų išvesties kelią ir importuokite iš tos sugeneruotos vietos.
3. Patikrinkite schemą, tada sugeneruokite klientą
Prieš generuodami patikrinkite schemą. „Prisma“ teikia prisma validate būtent schemos sintaksės ir konfigūracijos patikrinimui. Oficiali „prisma validate“ nuoroda taip pat palaiko --schema nestandartinėms schemos vietoms.
Oficiali generavimo komandos nuoroda paaiškina, kad „Prisma“ patikrina schemą ir įrašo sugeneruotus artefaktus į generatoriaus sukonfigūruotą išvestį.
Veiksmas: perskaitykite galutinę prisma generate išvestį. Nepriimkite prielaidos, kur failai buvo įrašyti; naudokite kelią, kurį praneša „Prisma“.
Paleiskite „prisma generate“ iš paketo, kuris valdo schemą, tada atidžiai perskaitykite išvesties eilutę, kad sužinotumėte, kur klientas buvo įrašytas.
4. Patikrinkite, ar išvestis yra ten, kur jūsų kodas jos tikisi
Sėkminga komanda yra būtina, bet vykdymo aplinka taip pat turi matyti tuos pačius failus. Tai tampa ypač svarbu, kai kūrimo įrankiai nukopijuoja tik dalį saugyklos, kai „Docker“ etapas praleidžia sugeneruotą išvestį arba kai monorepo sukuria vieną paketą nepirmiau nesukūręs duomenų bazės paketo.
Jei naudojate prisma-client, patikrinkite pasirinktinį output katalogą iš schemos. Jei naudojate prisma-client-js, patikrinkite įdiegto/sugeneruoto „Prisma“ paketo struktūrą, naudojamą jūsų versijoje. Nelaikykite katalogo, parodyto senesniame pavyzdyje, universaliu.
Veiksmas: palyginkite tris dalykus greta: generatoriaus output, kelią, praneštą prisma generate, ir importo sakinį faile, kuris sugenda. Jie turėtų apibūdinti tą patį sugeneruotą klientą.
Senuose „prisma-client-js“ projektuose sugeneruoti failai paprastai yra po node_modules. Naujesniuose „prisma-client“ projektuose naudojamas pasirinktinis išvesties katalogas, sukonfigūruotas schema.prisma.
5. Ištaisykite importą, o ne generuokite amžinai
Jei prisma generate pavyksta kiekvieną kartą, bet ta pati vykdymo klaida išlieka, pakartotinis paleidimas vargu ar padės. Kitas klausimas yra, ar jūsų programa importuoja ką tik sugeneruotą modulį.
„Prisma 7“ prisma-client generatoriui dabartinė dokumentacija rodo importus iš pasirinktinio sugeneruoto kelio. prisma-client-js projektui @prisma/client yra numatomas paketo importas. Šis skirtumas yra viena dažniausių priežasčių, kodėl dabartiniai ir senesni pavyzdžiai atrodo prieštaraujantys vienas kitam.
Veiksmas: peržiūrėkite savo saugyklą ir suraskite kiekvieną „PrismaClient“ importą. Migracijos ar monorepo atveju vienas paketas gali būti atnaujintas, o kitas vis dar importuoja seną kelią.
Importas turi atitikti generatorių, kurį iš tikrųjų naudojate: @prisma/client senoms „prisma-client-js“ sąrankoms arba jūsų sukonfigūruotas sugeneruotos išvesties kelias „Prisma 7“ „prisma-client“ generatoriui.
6. Patikrinkite „Prisma“ paketų versijas, kai projektas buvo atnaujintas
Versijų neatitikimas yra nuo aplinkybių priklausanti priežastis, o ne tai, ką ši klaida įrodo pati savaime. Tačiau „Prisma“ atnaujinimo vadovai nurodo kūrėjams atnaujinti ir prisma CLI paketą, ir @prisma/client, pereinant pagrindines versijas. Oficialus „Prisma 7“ atnaujinimo vadovas rodo abu paketus atnaujinamus kartu.
Patikrinkite, kas iš tikrųjų įdiegta:
npm ls prisma @prisma/client
Naudodami „pnpm“ ar „Yarn“, naudokite atitinkamą sąrašo komandą darbo sričiai, kuri valdo „Prisma“. Jei projektas sąmoningai lieka „Prisma 6“ ar kitoje palaikomoje versijoje, neatnaujinkite vien tam, kad pašalintumėte šį pranešimą. Suderinkite paketus su versija, kurios tikisi jūsų projektas, tada generuokite iš naujo.
Veiksmas: jei versijos tapo nenuoseklios po sujungimo ar priklausomybių atnaujinimo, atkurkite numatytas atitinkančias versijas ir vėl paleiskite prisma generate.
7. Įtraukite generavimą į diegimą ar kūrimą
Kai programa veikia kūrėjo kompiuteryje, bet nepavyksta po diegimo, trūkstamas veiksmas dažnai yra kūrimo procese, o ne programos kode. „Prisma“ „Next.js“ trikčių šalinimo dokumentacija konkrečiai rekomenduoja generuoti „Prisma Client“ kiekvieno diegimo metu, kai priklausomybių podėliavimas gali sutrukdyti diegimo metu vykdomam generavimui veikti taip, kaip tikimasi.
Paprastai jums reikia vieno patikimo generavimo taško, o ne kiekvieno įmanomo kablio. Pasirinkite tą kablį, kurį jūsų diegimo platforma iš tikrųjų vykdo. Žr. „Prisma“ oficialų „Next.js“ diegimo trikčių šalinimo puslapį su podėliavimu susijusiam atvejui.
Veiksmas: patikrinkite CI žurnalus ir patvirtinkite, kad prisma generate buvo paleistas po to, kai teisinga schema ir priklausomybės buvo prieinamos, ir prieš susiejimą ar serverio paleidimą.
Aiškaus generavimo veiksmo pridėjimas prie paketo scenarijų daro vietinius kūrimus ir CI elgseną labiau nuspėjamus. Išlaikykite tikslią komandą suderintą su jūsų paketų tvarkykle ir projekto struktūra.
8. Paleiskite procesą iš naujo po generavimo
Kūrimo serveriai, testų vykdyklės ir darbuotojų procesai gali išlaikyti modulius įkeltus atmintyje. Failų generavimas diske negarantuoja, kad procesas, kuriam jau nepavyko importas, įkels juos automatiškai.
Veiksmas: sustabdykite ir paleiskite iš naujo kūrimo serverį, darbuotoją ar testavimo procesą po sėkmingo generavimo. Jei programa dabar pereina prie kitos duomenų bazės ar konfigūracijos klaidos, tai yra naudingas įrodymas, kad pati kliento generavimo problema išspręsta.
Paleiskite procesą iš naujo po generavimo, kad vykdymo aplinka įkeltų sugeneruotą modulį, o ne išlaikytų nepavykusį ar pasenusį importą atmintyje.
Monorepo: generuokite pakete, kuris valdo schemą
Darbo srityje npx prisma generate paleidimas iš saugyklos šaknies nėra automatiškai tapatus generavimui duomenų bazės pakete. Schemos aptikimas, konfigūracijos failai, priklausomybės ir santykiniai išvesties keliai gali skirtis priklausomai nuo paketo.
„Prisma“ oficialus „pnpm“ darbo sričių vadovas demonstruoja atskirą duomenų bazės paketą su savo schema, sugeneruotu klientu, pagalbiniais scenarijais ir eksportais vartojančioms programoms.
Generuokite iš packages/database, eksportuokite klientą iš to paketo ir leiskite programoms priklausyti nuo paketo, o ne siekti į kitos darbo srities privatų sugeneruotą katalogą.
Veiksmas: padarykite duomenų bazės paketo kūrimo ar generavimo užduotį aiškia bet kurios ją importuojančios programos priklausomybe.
Ar reikia ištrinti node_modules?
Ne kaip pirmą žingsnį. node_modules ištrynimas gali ištaisyti sugadintą diegimą, bet taip pat gali paslėpti tikrąją problemą priversdamas daug nesusijusių paketų pasikeisti vienu metu. Jei schemos validavimas pavyksta ir generavimas praneša teisingą išvestį, pirmiausia patikrinkite importus, paketų versijas ir kūrimo kelius.
Švarus perinstaliavimas tampa pagrįstas, kai paketo metaduomenys yra nenuoseklūs, sugeneruota išvestis akivaizdžiai pasenusi po priklausomybių pakeitimų arba jūsų paketų tvarkyklė praneša apie diegimo problemas.
Veiksmas: užfiksuokite npm ls prisma @prisma/client ir prisma generate išvestį prieš valydami. Tai suteikia įrodymų, su kuriais galite palyginti po perinstaliavimo.
Ko ši klaida jums nepasako
Ji pati savaime neįrodo, kad jūsų duomenų bazė nepasiekiama. Pirmiausia ištaisykite generavimą/importo sprendimą, tada įvertinkite bet kokią likusią ryšio klaidą.
Ji neįrodo, kad trūksta migracijų. „Prisma Client“ generavimas ir duomenų bazės schemos migracija yra susiję procesai, bet tai nėra ta pati operacija.
Ji nereiškia, kad kiekvienas projektas turėtų importuoti iš @prisma/client. Tai priklauso nuo generatoriaus ir „Prisma“ versijos.
Ji nereiškia, kad visada būtina perinstaliuoti priklausomybes. Teisingas prisma generate ir teisingas importo kelias dažnai yra pakankami.
Prevencijos kontrolinis sąrašas
Paleiskite prisma validate, kai pasikeičia schema ar generatoriaus konfigūracija.
Paleiskite prisma generate po schemos pakeitimų ir po pakeitimų, turinčių įtakos sugeneruoto kliento API, gavimo.
Išlaikykite vykdymo aplinkos importą suderintą su sukonfigūruota generatoriaus išvestimi.
Išlaikykite prisma ir @prisma/client versijas suderintas, kai jūsų pasirinkta „Prisma“ versija naudoja abu paketus.
CI ir produkcijoje paleiskite generavimą aiškiai prieš kūrimą/paleidimą, kai priklausomybių podėliavimas galėtų jį praleisti.
Monorepo atveju generuokite darbo srityje, kuri valdo schemą, ir atskleiskite klientą per stabilią paketo ribą.
Paleiskite ilgai veikiančius kūrimo procesus iš naujo po anksčiau trūkusio kliento sugeneravimo.
Diegimo platformoms, kurios podėliuoja priklausomybes, paleiskite „prisma generate“ aiškiai diegimo ar kūrimo metu, o ne manydami, kad ankstesnis sugeneruotas klientas vis dar aktualus.
Esmė
Patikimas sprendimas yra trumpa įrodymų grandinė: nustatykite savo „Prisma“ generatorių, patikrinkite numatytą schemą, sugeneruokite klientą, patikrinkite faktinį išvesties kelią ir suderinkite importą su ta išvestimi. Jei problema kyla tik CI ar produkcijoje, perkelkite tą patį generavimo veiksmą į kūrimo eigą. Jei ji kyla monorepo, padarykite generavimą to paketo, kuris valdo schemą, atsakomybe.
Šis metodas yra patikimesnis nei pakartotinis priklausomybių trynimas, nes jis parodo, kuris sluoksnis buvo neteisingas: schemos pasirinkimas, generavimas, paketų versijos, importo sprendimas ar diegimo pakavimas.