主要变化: 引入prisma.config.ts 用于配置env,seed等所有prisma设置项目,与package.json和schema解耦;同时client改为原始js代码,并生成到指定自定义目录,极大提高编译打包效率,避免不同环境生成client!
主要操作: 以下以使用自己的postgres数据库为例
-
先移除之前安装的相关依赖, 安装以下依赖项最新版
npm install prisma @types/node @types/pg -D npm install @prisma/client @prisma/adapter-pg pg dotenv -
初始化自动生成schema和env及prisma.config.ts文件,也可以手动添加,记得prisma.config.t里更改目录
npx prisma init --datasource-provider postgresql --output src/prisma/generated/prisma自动生成的
schema文件内容(命令里的output即指定目录,其余文件生成到根目录):generator client { provider = "prisma-client" output = "./generated/prisma" } datasource db { provider = "postgresql" }自动生成的
env文件内容:# 如果env已存在会增量添加以下内容 DATABASE_URL="postgresql://johndoe:randompassword@localhost:5432/mydb?schema=public"自动生成的
prisma.config.ts文件内容:// This file was generated by Prisma and assumes you have installed the following: // npm install --save-dev prisma dotenv import 'dotenv/config'; import { defineConfig, env } from 'prisma/config'; export default defineConfig({ schema: 'src/prisma/schema.prisma', migrations: { path: 'src/prisma/migrations', seed: 'ts-node src/prisma/seed.ts', // 变化: seed改到此文件定义 }, datasource: { url: env('DATABASE_URL'), }, }); -
其余命令都没变
1. 定义好schema,同步数据库,执行 npx prisma migrate dev 2. 生成client,执行 npx prisma generate 3. 生成seed数据,注意seed配置需要改到prisma.config.ts文件, 执行 npx prisma db seed -
常规使用方式
// lib/prisma.ts import { PrismaPg } from '@prisma/adapter-pg'; import 'dotenv/config'; import { PrismaClient } from '../generated/prisma/client'; const connectionString = `${process.env.DATABASE_URL}`; const adapter = new PrismaPg({ connectionString }); const prisma = new PrismaClient({ adapter }); export { adapter, prisma }; -
nestjs引入使用
import { Injectable, OnModuleDestroy, OnModuleInit } from '@nestjs/common'; import { PrismaClient } from './generated/prisma/client'; import { adapter } from './lib/prisma'; @Injectable() export class PgService extends PrismaClient implements OnModuleInit, OnModuleDestroy { constructor() { super({ adapter }) } async onModuleInit() { await this.$connect(); } async onModuleDestroy() { await this.$disconnect(); } } -
缺陷: 如果希望同时管理多种类型的数据库, 7.0版本将schema的路径定义改到prisma.config.ts里了, 但暂时不支持多个schema数据,还是只能命令行额外执行指定路径