Как импортировать сгенерированный PrismaClient из папки node_modules?
Дано.
В бэкенд-приложении есть два микросервиса trainings
(тренировки) и gyms
(спортивные залы).
Каждый микросервис использует свою БД(PostgreSQL).
Взаимодействие с БД осуществляется с помощью PrismaORM.
Приложение строится с использованием монорепозитория, для всех микросервисов используется единая папка node_modules/
Мне нужно сгенерировать 2 PrismaClient-а (от микросервисов trainings
и gyms
) в эту папку node_modules
.
Для этого я сделал следующее:
- в микросервисе
trainings
, в файле schema.prisma я указал путь куда будет генерироваться клиент
generator client {
provider = "prisma-client-js"
output = "../../../node_modules/.prisma/client-trainings"
}
- тоже самое я сделал для микросервиса
gyms
(в поле output путь до папки куда генерируется клиент)
generator client {
provider = "prisma-client-js"
output = "../../../node_modules/.prisma/client-gyms"
}
Оба клиента были успешно сгенерированы после того как я вызвал команды:
nx run trainings:db-generate
;nx run gyms:db-generate
;
На всякий случай укажу какие действия вызывают эти команды. Данные команды у меня описаны в файле project.json:
"db-generate": {
"executor": "nx:run-commands",
"options": {
"command": "npx prisma generate --schema ./prisma/schema.prisma",
"cwd": "apps/gyms"
}
},
А вот теперь собственно сам вопрос.
Когда у меня был 1 микросервис trainings
я в файлы, где описывал логику приложения, импортировал PrismaClient следующим образом:
import { PrismaClient } from '@prisma/client';
Но после того как я добавил второй клиент от микросервиса gyms
сокращённая запись не работает, например:
import { PrismaClient } from '@prisma/client-gyms';
илиimport { PrismaClient } from '@prisma/client-trainings';
Появляется ошибка - Cannot find module '@prisma/client-gyms' or its corresponding type declarations.
Поэтому я вынужден импортировать PrismaClient полностью прописывая путь до него, например вот так:
import { PrismaClient } from '../../../../../node_modules/.prisma/client-gyms';
илиimport { PrismaClient } from '../../../../../node_modules/.prisma/client-trainins';
Как можно избавиться от такой длинной записи???
И второй вопрос, он даже более важный чем предыдущий.
Оба микросервиса (trainings
и gyms
) перестали запускаться, когда я вызываю следующие команды:
nx run trainins:serve
,nx run gyms:serve
Данные команды у меня описаны в файле project.json:
"serve": {
"executor": "@nrwl/js:node",
"options": {
"buildTarget": "gyms:build"
},
"configurations": {
"production": {
"buildTarget": "gyms:build:production"
}
}
},
Каждый раз когда я вызываю эту команду у меня выскакивает следующая ошибка:
[Nest] 1556 - 17.04.2023, 19:17:15 ERROR [ExceptionHandler] ENOENT: no such file or directory, open 'C:\Users\simae\Desktop\FitFriends\fit-friends\dist\apps\gyms\schema.prisma'
У меня есть подозрение, что данная проблема связана с тем что у меня теперь два PrismaClient-a. Во всяком случае до того когда у меня был один микросервис и один PrismaClient таких проблем не было.
Не уверен что мне тут смогут помочь, но на всякий случай опубликую вопрос, попытка не пытка :) Сам я уже с этим вопросом вожусь больше суток, перерыл всю доку по призме, но так и не смог разобраться. К сожалению опыта и знаний пока не достаточно.