nestjs-prisma-monorepo
                                
                                
                                
                                    nestjs-prisma-monorepo copied to clipboard
                            
                            
                            
                        🐈 NestJS + Prisma + Yarn Workspaces (Monorepo) full-stack project template
Nest Prisma Monorepo
This template is what I came up with after I learned about monorepos and played with them for a while, hope you find it helpful! I recommend you use one of the alternatives.
About
- Nest.js + JWT + GraphQL (code-first) + REST + Swagger*
 - Prisma + utilities
 - Front-end app **
 - Full Typescript support
 - Common package
 - Core package + NestJS utilites
 - ESLint Ready (
yarn lint) - Prettier Ready
 - CI for GitHub Actions
 - Yarn (berry) version 
3.1.0(PnP disabled since it's not supported by NestJs and Prisma yet) 
*The api app is a clone of this other awesome template
** The front-end app is just a static HTML file, since people might use different frameworks with NestJS, so feel free to add a NextJS / NuxtJS / Angular / Svelte / etc. as your front-end
Structure
This template follows Nest.js's convention of monorepo, so there are Apps and then there are Libraries.
📦 nest-prisma-monorepo
 ┣ 📂 apps
 ┃ ┣ 📂 api
 ┃ ┣ 📂 web
 ┃ ┗ 📂 etc.
 ┣ 📂 libs
 ┃ ┣ 📂 common 
 ┃ ┣ 📂 core 
 ┃ ┣ 📂 prisma
 ┃ ┗ 📂 etc.
 ┣ 📜.eslintrc.js
 ┣ 📜.prettierrc
 ┣ 📜.yarnrc.yml
- core and common are imported from your back-end apps.
 - prisma is used by your back-end apps that need database.
 - common is shared between all of your apps.
 
How to import from other apps/libraries
To import an package (app or library) into another one:
- Add the package as a dependency like so:
 
{
  "dependencies": {
    "@acme/common": "workspace:*"
  }
}
Note that the @acme/common name, comes from libs/common/package.json's name key:
{
  "name": "@acme/common"
}
- Use it in your code like this:
 
import { MyCommonModule } from '@acme/common';
Note: After cloning, replace all
acmes with your organization/project name.
Note about Prisma
Instead of importing your Prisma modules from @prisma/client, now you import them from @acme/prisma.
This way you can defined your schema in a "library" and then import the prisma client in different apps, accessing the same database.
For instance:
import { PrismaClient } from '@acme/prisma';
const prisma = new PrismaClient();
Note about .env files
After you clone the template, you gotta create two environment files, one in apps/api and one in lib/prisma. You could just copy .env.example and rename it to .env and fill it with your own values.