Αρχική
» ΒΑΣΙΚΕΣ ΓΝΩΣΕΙΣ
»
Πώς να διορθώσετε το σφάλμα «Το Prisma Client δεν έχει δημιουργηθεί ακόμη»
Πώς να διορθώσετε το σφάλμα «Το Prisma Client δεν έχει δημιουργηθεί ακόμη»
Αν η εφαρμογή σας καταρρέει με το μήνυμα Prisma Client has not been generated yet, η ταχύτερη χρήσιμη αντίδραση δεν είναι να διαγράψετε τα πάντα και να επανεγκαταστήσετε στα τυφλά. Πρώτα προσδιορίστε ποιον generator του Prisma Client χρησιμοποιεί το έργο σας, δημιουργήστε τον client από το σωστό schema και βεβαιωθείτε ότι η εφαρμογή σας κάνει import από τη θέση που πραγματικά δημιουργήθηκε.
Υπάρχει μια σημαντική πηγή σύγχυσης που σχετίζεται με την έκδοση. Όπως ελέγχθηκε τον Σεπτέμβριο του 2026, η τεκμηρίωση του Prisma 7 χρησιμοποιεί τον generator prisma-client με υποχρεωτικό κατάλογο output, και ο κώδικας της εφαρμογής κάνει import το Prisma Client από αυτή τη δημιουργημένη διαδρομή. Παλαιότερα και ακόμη κοινά έργα χρησιμοποιούν το prisma-client-js, όπου το @prisma/client είναι το κανονικό import και τα δημιουργημένα αρχεία ειδικά για το έργο βρίσκονταν παραδοσιακά κάτω από το node_modules/.prisma/client. Η ανάμειξη αυτών των δύο συνόλων οδηγιών μπορεί να σας αφήσει με έναν δημιουργημένο client σε ένα σημείο και τον κώδικα της εφαρμογής να κάνει import από άλλο. Ο επίσημος οδηγός δημιουργίας του Prisma Client τεκμηριώνει την τρέχουσα συμπεριφορά του Prisma 7.
Γρήγορη διάγνωση: τι σημαίνει συνήθως το σφάλμα
Τι παρατηρείτε
Ο πιο χρήσιμος έλεγχος
Επόμενη ενέργεια
Το σφάλμα εμφανίζεται αμέσως κατά το import ή τη δημιουργία του PrismaClient
Δημιουργήθηκε ο client για αυτό το checkout και το schema;
Εκτελέστε npx prisma generate από το σωστό πακέτο.
Το prisma generate πετυχαίνει, αλλά η εφαρμογή εξακολουθεί να πετάει το σφάλμα
Ταιριάζει το import σας με την έξοδο του generator;
Εξετάστε το block του generator και τον δημιουργημένο κατάλογο και μετά διορθώστε το import.
Λειτουργεί τοπικά αλλά αποτυγχάνει σε CI ή production
Εκτελεί το build τη δημιουργία αφού είναι διαθέσιμες οι εξαρτήσεις και τα αρχεία schema;
Προσθέστε ένα ρητό βήμα generate στο install ή στο build.
Η εφαρμογή σε monorepo δεν μπορεί να εντοπίσει τον client
Ποιο workspace κατέχει το schema.prisma και τον δημιουργημένο κώδικα;
Κάντε generate σε αυτό το workspace και εξάγετε/εισάγετε το με συνέπεια.
Η ίδια η δημιουργία αποτυγχάνει
Είναι έγκυρο το schema και διαβάζει το Prisma το σωστό schema;
Εκτελέστε npx prisma validate, διορθώνοντας πρώτα σφάλματα επικύρωσης ή διαδρομής.
1. Διαβάστε την αποτυχία πριν αλλάξετε εξαρτήσεις
Το επιβεβαιωμένο μέρος είναι απλό: το Prisma Client είναι δημιουργημένος κώδικας προσαρμοσμένος στο schema σας. Αν το runtime κάνει import ένα σημείο εισόδου του client του οποίου η δημιουργημένη υλοποίηση απουσιάζει, είναι παρωχημένη ή δεν βρίσκεται εκεί που την περιμένει το import, η εκκίνηση μπορεί να αποτύχει πριν εκτελεστεί το πρώτο ερώτημα στη βάση δεδομένων.
Αυτό που δεν αποδεικνύεται από αυτό το μήνυμα μόνο του είναι ότι η βάση δεδομένων σας είναι κάτω, ότι τα διαπιστευτήριά σας είναι λάθος ή ότι οι migrations απέτυχαν. Αυτές οι συνθήκες μπορούν να προκαλέσουν άλλα σφάλματα του Prisma, αλλά αυτό το συγκεκριμένο μήνυμα σας κατευθύνει πρώτα στη δημιουργία και την επίλυση modules.
Ενέργεια: σημειώστε το ακριβές πακέτο, το αρχείο και τη διαδρομή import στο stack trace. Στη συνέχεια ελέγξτε το block του generator στο schema πριν επανεγκαταστήσετε οτιδήποτε.
Παράδειγμα του σφάλματος κατά την εκκίνηση της εφαρμογής. Αντιμετωπίστε το πρώτα ως πρόβλημα δημιουργίας client ή διαδρομής import, όχι ως απόδειξη διακοπής της βάσης δεδομένων.
2. Προσδιορίστε τον generator και την αναμενόμενη διαδρομή import
Ανοίξτε το prisma/schema.prisma ή τη διαδρομή schema που έχει ρυθμιστεί για το έργο σας. Ο generator καθορίζει πού δημιουργείται το Prisma Client και πώς πρέπει να το κάνετε import.
Με αυτό το μοτίβο, κάντε import από την έξοδο που ρυθμίσατε, για παράδειγμα:
import { PrismaClient } from "../generated/prisma/client";
Η τρέχουσα τεκμηρίωση του Prisma αναφέρει ότι το output είναι υποχρεωτικό για τον generator prisma-client του Prisma 7 και ότι τα imports προέρχονται από αυτή τη δημιουργημένη θέση.
Σε αυτή την παλαιότερη διάταξη, ο κώδικας της εφαρμογής χρησιμοποιεί συνήθως:
import { PrismaClient } from "@prisma/client";
Ενέργεια: μην αλλάξετε το import απλώς επειδή ένα tutorial χρησιμοποιεί διαφορετικό generator. Ταιριάξτε το import με το δικό σας schema και την έκδοσή σας.
Παράδειγμα schema παλαιότερου στυλ prisma-client-js. Σε έργα Prisma 7 που χρησιμοποιούν τον νεότερο generator prisma-client, ορίστε ρητή διαδρομή output και κάντε import από αυτή τη δημιουργημένη θέση.
3. Επικυρώστε το schema και μετά δημιουργήστε τον client
Πριν από τη δημιουργία, επικυρώστε το schema. Το Prisma παρέχει το prisma validate ειδικά για να ελέγχει τη σύνταξη και τη διαμόρφωση του schema. Η επίσημη αναφορά του prisma validate υποστηρίζει επίσης το --schema για μη προεπιλεγμένες θέσεις schema.
Η επίσημη αναφορά της εντολής generate εξηγεί ότι το Prisma εξετάζει το schema και γράφει τα δημιουργημένα artifacts στην έξοδο που έχει ρυθμίσει ο generator.
Ενέργεια: διαβάστε την τελική έξοδο του prisma generate. Μην υποθέσετε πού γράφτηκαν τα αρχεία· χρησιμοποιήστε τη διαδρομή που αναφέρει το Prisma.
Εκτελέστε prisma generate από το πακέτο που κατέχει το schema και μετά διαβάστε προσεκτικά τη γραμμή εξόδου για να μάθετε πού γράφτηκε ο client.
4. Επαληθεύστε ότι η έξοδος υπάρχει εκεί που την περιμένει ο κώδικάς σας
Μια επιτυχημένη εντολή είναι απαραίτητη, αλλά το runtime πρέπει επίσης να βλέπει τα ίδια αρχεία. Αυτό γίνεται ιδιαίτερα σημαντικό όταν τα εργαλεία build αντιγράφουν μόνο μέρος ενός repository, όταν ένα στάδιο Docker παραλείπει τη δημιουργημένη έξοδο ή όταν ένα monorepo χτίζει ένα πακέτο χωρίς πρώτα να χτίσει το πακέτο βάσης δεδομένων.
Για το prisma-client, εξετάστε τον προσαρμοσμένο κατάλογο output από το schema. Για το prisma-client-js, εξετάστε τη διάταξη του εγκατεστημένου/δημιουργημένου πακέτου Prisma που χρησιμοποιεί η έκδοσή σας. Μην θεωρείτε τον φάκελο που εμφανίζεται σε ένα παλαιότερο παράδειγμα ως καθολικό.
Ενέργεια: συγκρίνετε τρία πράγματα δίπλα-δίπλα: το output του generator, τη διαδρομή που αναφέρει το prisma generate και τη δήλωση import στο αρχείο που καταρρέει. Θα πρέπει να περιγράφουν τον ίδιο δημιουργημένο client.
Για παλαιότερα έργα prisma-client-js, τα δημιουργημένα αρχεία βρίσκονται συνήθως κάτω από το node_modules. Τα νεότερα έργα prisma-client χρησιμοποιούν τον προσαρμοσμένο κατάλογο output που έχει ρυθμιστεί στο schema.prisma.
5. Διορθώστε το import αντί να κάνετε generate για πάντα
Αν το prisma generate πετυχαίνει κάθε φορά αλλά το ίδιο σφάλμα runtime παραμένει, η επανάληψη της εκτέλεσής του είναι απίθανο να βοηθήσει. Το επόμενο ερώτημα είναι αν η εφαρμογή σας κάνει import το δημιουργημένο module που μόλις δημιουργήσατε.
Για έναν generator prisma-client του Prisma 7, η τρέχουσα τεκμηρίωση δείχνει imports από την προσαρμοσμένη δημιουργημένη διαδρομή. Για ένα έργο prisma-client-js, το @prisma/client είναι το αναμενόμενο import πακέτου. Αυτή η διαφορά είναι ένας από τους πιο συνηθισμένους λόγους που τα τρέχοντα και τα παλαιότερα παραδείγματα φαίνεται να αντιφάσκουν μεταξύ τους.
Ενέργεια: αναζητήστε στο repository σας κάθε import του PrismaClient. Σε μια μετάβαση ή monorepo, ένα πακέτο μπορεί να ενημερωθεί ενώ ένα άλλο εξακολουθεί να κάνει import την παλιά διαδρομή.
Το import πρέπει να ταιριάζει με τον generator που πραγματικά χρησιμοποιείτε: @prisma/client για παλαιότερες ρυθμίσεις prisma-client-js ή τη ρυθμισμένη διαδρομή δημιουργημένης εξόδου για τον generator prisma-client του Prisma 7.
6. Ελέγξτε τις εκδόσεις των πακέτων Prisma όταν το έργο έχει αναβαθμιστεί
Μια αναντιστοιχία εκδόσεων είναι ένα αίτιο που εξαρτάται από τις περιστάσεις, όχι κάτι που αποδεικνύει από μόνο του αυτό το σφάλμα. Ωστόσο, οι οδηγοί αναβάθμισης του Prisma καθοδηγούν τους προγραμματιστές να ενημερώνουν και το πακέτο CLI prisma και το @prisma/client όταν αλλάζουν κύριες εκδόσεις. Ο επίσημος οδηγός αναβάθμισης στο Prisma 7 δείχνει και τα δύο πακέτα να αναβαθμίζονται μαζί.
Ελέγξτε τι είναι πραγματικά εγκατεστημένο:
npm ls prisma @prisma/client
Με pnpm ή Yarn, χρησιμοποιήστε την αντίστοιχη εντολή λίστας για το workspace που κατέχει το Prisma. Αν το έργο παραμένει σκόπιμα στο Prisma 6 ή σε άλλη υποστηριζόμενη έκδοση, μην αναβαθμίσετε απλώς για να καθαρίσετε αυτό το μήνυμα. Ευθυγραμμίστε τα πακέτα με την έκδοση που περιμένει το έργο σας και μετά κάντε generate ξανά.
Ενέργεια: αν οι εκδόσεις έγιναν ασυνεπείς μετά από ένα merge ή ενημέρωση εξαρτήσεων, επαναφέρετε τις προβλεπόμενες ταιριαστές εκδόσεις και εκτελέστε ξανά το prisma generate.
7. Κάντε τη δημιουργία μέρος του install ή του build
Όταν μια εφαρμογή λειτουργεί σε μηχάνημα προγραμματιστή αλλά αποτυγχάνει μετά την ανάπτυξη, το βήμα που λείπει βρίσκεται συχνά στο pipeline build και όχι στον κώδικα της εφαρμογής. Η τεκμηρίωση αντιμετώπισης προβλημάτων του Prisma για το Next.js συνιστά συγκεκριμένα τη δημιουργία του Prisma Client σε κάθε ανάπτυξη όταν η προσωρινή αποθήκευση εξαρτήσεων μπορεί να εμποδίσει τη δημιουργία κατά το install να εκτελεστεί όπως αναμένεται.
Κανονικά χρειάζεστε ένα αξιόπιστο σημείο δημιουργίας, όχι κάθε πιθανό hook. Επιλέξτε το hook που εκτελεί πραγματικά η πλατφόρμα ανάπτυξής σας. Δείτε την επίσημη σελίδα αντιμετώπισης προβλημάτων ανάπτυξης του Next.js του Prisma για την περίπτωση που σχετίζεται με την προσωρινή αποθήκευση.
Ενέργεια: εξετάστε τα logs του CI και επιβεβαιώστε ότι το prisma generate εκτελέστηκε αφού ήταν διαθέσιμα το σωστό schema και οι εξαρτήσεις, και πριν από το bundling ή την εκκίνηση του server.
Η προσθήκη ενός ρητού βήματος generate στα scripts του πακέτου κάνει τη συμπεριφορά των τοπικών builds και του CI πιο προβλέψιμη. Κρατήστε την ακριβή εντολή συνεπή με τον package manager και τη διάταξη του έργου σας.
8. Επανεκκινήστε τη διαδικασία μετά τη δημιουργία
Οι servers ανάπτυξης, οι εκτελεστές δοκιμών και οι διεργασίες worker μπορούν να κρατούν modules φορτωμένα στη μνήμη. Η δημιουργία αρχείων στον δίσκο δεν εγγυάται ότι μια διαδικασία που απέτυχε ήδη σε ένα import θα τα επαναφορτώσει αυτόματα.
Ενέργεια: σταματήστε και επανεκκινήστε τον server ανάπτυξης, τον worker ή τη διαδικασία δοκιμών μετά από μια επιτυχημένη δημιουργία. Αν η εφαρμογή προχωρήσει τώρα σε διαφορετικό σφάλμα βάσης δεδομένων ή διαμόρφωσης, αυτό είναι χρήσιμη απόδειξη ότι το πρόβλημα δημιουργίας του client έχει διορθωθεί.
Επανεκκινήστε τη διαδικασία μετά τη δημιουργία, ώστε το runtime να επαναφορτώσει το δημιουργημένο module αντί να κρατά στη μνήμη ένα αποτυχημένο ή παρωχημένο import.
Monorepos: κάντε generate στο πακέτο που κατέχει το schema
Σε ένα workspace, η εκτέλεση του npx prisma generate από τη ρίζα του repository δεν είναι αυτόματα ισοδύναμη με τη δημιουργία μέσα στο πακέτο βάσης δεδομένων. Η ανακάλυψη του schema, τα αρχεία config, οι εξαρτήσεις και οι σχετικές διαδρομές εξόδου μπορούν όλα να διαφέρουν ανά πακέτο.
Ο επίσημος οδηγός για pnpm workspaces του Prisma δείχνει ένα αποκλειστικό πακέτο βάσης δεδομένων με το δικό του schema, δημιουργημένο client, βοηθητικά scripts και exports για τις εφαρμογές που το καταναλώνουν.
Κάντε generate από το packages/database, εξάγετε τον client από αυτό το πακέτο και κάντε τις εφαρμογές να εξαρτώνται από το πακέτο αντί να φτάνουν στον ιδιωτικό δημιουργημένο κατάλογο άλλου workspace.
Ενέργεια: κάντε την εργασία build ή generate του πακέτου βάσης δεδομένων ρητή εξάρτηση κάθε εφαρμογής που το κάνει import.
Χρειάζεται να διαγράψετε το node_modules;
Όχι ως πρώτο βήμα. Η διαγραφή του node_modules μπορεί να διορθώσει μια κατεστραμμένη εγκατάσταση, αλλά μπορεί επίσης να κρύψει το πραγματικό πρόβλημα αναγκάζοντας πολλά άσχετα πακέτα να αλλάξουν ταυτόχρονα. Αν η επικύρωση του schema πετυχαίνει και η δημιουργία αναφέρει τη σωστή έξοδο, επαληθεύστε πρώτα τα imports, τις εκδόσεις των πακέτων και τις διαδρομές build.
Μια καθαρή επανεγκατάσταση γίνεται λογική όταν τα metadata των πακέτων είναι ασυνεπή, η δημιουργημένη έξοδος είναι σαφώς παρωχημένη μετά από αλλαγές εξαρτήσεων ή ο package manager σας αναφέρει προβλήματα εγκατάστασης.
Ενέργεια: καταγράψτε το npm ls prisma @prisma/client και την έξοδο του prisma generate πριν τον καθαρισμό. Αυτό σας δίνει στοιχεία για σύγκριση μετά την επανεγκατάσταση.
Τι δεν σας λέει αυτό το σφάλμα
Δεν αποδεικνύει από μόνο του ότι η βάση δεδομένων σας είναι μη προσβάσιμη. Διορθώστε πρώτα τη δημιουργία/επίλυση import και μετά αξιολογήστε οποιοδήποτε σφάλμα σύνδεσης παραμένει.
Δεν αποδεικνύει ότι λείπουν migrations. Η δημιουργία του Prisma Client και η μετανάστευση του schema της βάσης δεδομένων είναι σχετικές ροές εργασίας, αλλά δεν είναι η ίδια λειτουργία.
Δεν σημαίνει ότι κάθε έργο πρέπει να κάνει import από το @prisma/client. Αυτό εξαρτάται από τον generator και την έκδοση του Prisma.
Δεν σημαίνει ότι απαιτείται πάντα επανεγκατάσταση εξαρτήσεων. Ένα σωστό prisma generate μαζί με σωστή διαδρομή import είναι συχνά αρκετό.
Λίστα ελέγχου πρόληψης
Εκτελέστε prisma validate όταν αλλάζει το schema ή η διαμόρφωση του generator.
Εκτελέστε prisma generate μετά από αλλαγές στο schema και μετά από λήψη αλλαγών που επηρεάζουν τα APIs του δημιουργημένου client.
Κρατήστε το import του runtime ευθυγραμμισμένο με τη ρυθμισμένη έξοδο του generator.
Κρατήστε τις εκδόσεις των prisma και @prisma/client ευθυγραμμισμένες όταν η έκδοση Prisma που έχετε επιλέξει χρησιμοποιεί και τα δύο πακέτα.
Σε CI και production, εκτελέστε τη δημιουργία ρητά πριν από το build/start όταν η προσωρινή αποθήκευση εξαρτήσεων θα μπορούσε να την παραλείψει.
Σε monorepos, κάντε generate στο workspace που κατέχει το schema και εκθέστε τον client μέσω ενός σταθερού ορίου πακέτου.
Επανεκκινήστε τις μακροχρόνιες διαδικασίες ανάπτυξης μετά τη δημιουργία ενός προηγουμένως απόντος client.
Για πλατφόρμες ανάπτυξης που κάνουν προσωρινή αποθήκευση εξαρτήσεων, εκτελέστε prisma generate ρητά κατά το install ή το build αντί να υποθέτετε ότι ένας προηγουμένως δημιουργημένος client είναι ακόμη ενημερωμένος.
Συμπέρασμα
Η αξιόπιστη διόρθωση είναι μια σύντομη αλυσίδα αποδείξεων: προσδιορίστε τον generator του Prisma, επικυρώστε το επιδιωκόμενο schema, δημιουργήστε τον client, επαληθεύστε την πραγματική διαδρομή εξόδου και κάντε το import σας να ταιριάζει με αυτή την έξοδο. Αν το πρόβλημα συμβαίνει μόνο σε CI ή production, μεταφέρετε το ίδιο βήμα δημιουργίας στη ροή εργασίας του build. Αν συμβαίνει σε monorepo, κάντε τη δημιουργία ευθύνη του πακέτου που κατέχει το schema.
Αυτή η προσέγγιση είναι πιο αξιόπιστη από τη συνεχή διαγραφή εξαρτήσεων, επειδή σας λέει ποιο επίπεδο ήταν λάθος: επιλογή schema, δημιουργία, εκδόσεις πακέτων, επίλυση import ή συσκευασία ανάπτυξης.