# Prisma
Nx plugin integration with Prisma (opens new window)
# you can also skip prisma related installation, which will also be installed when executing generator:app
yarn add @prisma/client
yarn add nx-plugin-prisma prisma nx-plugin-devkit nx-plugin-workspace -D
# some required peer deps in nx workspace
yarn add @nrwl/node @nrwl/workspace @nrwl/tao @angular-devkit/schematics -D
# Getting Started
Install dependencies above.
Run
nx g nx-plugin-prisma:init --app prisma-app.If your
tsconfig.base.jsondoes not contain the followingcompilerOptions, add it toprisma-app/tsconfig.json.{ "compilerOptions": { "allowSyntheticDefaultImports": true, "module": "CommonJS", "esModuleInterop": true, } }Run
nx prisma-db-push prisma-appto create SQLite database and generate Prisma client. (Or if you want to useprisma generatefor client creation, you can also executenx prisma-db-push prisma-app --skip-generateandnx prisma-generate prisma-app)Run
nx dev prisma-app.
# Generators
# init
nx g nx-plugin-prisma:init --app prisma-app --latestPackage
--latestPackagemeans fetching latest version of Prisma package instead of use local version(^3.0.2for now)
Create a node application with prisma related initializations:
- Required dependencies(prisma (opens new window) & @prisma/client (opens new window)) installation.
- Workspace configuration corresponding to Prisma cli commands,
generate/db/studio... - (Optional)Initial Prisma schema and env file setup.
You can then run nx prisma-db-push prisma-app command to push schema to database and generate Prisma Client.
The generated application use self-contained scripts to handle dev/build/start command, for example, nx dev prisma-app will execute this file:
// scripts/dev.ts
import execa from 'execa';
export default async function dev() {
await execa('ts-node-dev --respawn src/main.ts', {
cwd: process.cwd(),
stdio: 'inherit',
shell: true,
});
}
(async () => {
await dev();
})();
Plugin specified schema options:
prismaDirectory: specify where prisma schema located in, relative to project source root. default:app/prisma.schemaName: specify prisma schema file name(without.prismaextname). default:schema.datasourceProvider: specify prisma datasource.provider, one ofsqlite/postgresql/mysql/sqlserver. default:sqlite. NOTE: only sqlite related works will be setup, so you need to handle manually if other provider is used.useProjectEnv: should create.envfile inside project root and use it. default:true.initialSchema: create initial simple prisma schema model definition.collectArgs: should use single-line command, for example, when setting astrue, workspace target will be like:{ "executor": "nx-plugin-workspace:exec", "options": { "command": "prisma db push", "args": "--schema=src/app/prisma/prisma.schema --force-reset" } }Otherwise it will be:
{ "executor": "nx-plugin-workspace:exec", "options": { "command": "prisma db push", "schema": "src/app/prisma/schema.prisma", "forceReset": true } }noDBPull: should omitprisma db pullfrom generated project workspace targets. default:false.noDBPush: should omitprisma db pushfrom generated project workspace targets. default:false.noStudio: should omitprisma studiofrom generated project workspace targets. default:false.noMigrate: should omitprisma migratefrom generated project workspace targets. default:false.
You can find more supported schema options in Prisma.Generator.Init.
# setup
nx g nx-plugin-prisma:setup exist-node-app
Similar to init, but setup generator should and can only be applied to exist application, which will also install deps, generate Prisma file, and add related workspace targsts for application.
Another difference is that setup generator doesnot add dev/build/start targets.
setup generator accepts similar schema options like init generator.
You can find more supported schema options in Prisma.Generator.Setup.
# Executors
# info
nx info prisma-app
Report nx workspace & Prisma & OS Informations.
Add target configuration below (included in init / setup generator):
{
"prisma-app": {
"targets": {
"info": {
"executor": "nx-plugin-prisma:info",
"options": {}
}
}
}
}