You are here

纯JS项目升级prisma 6.x 到prisma 7.x

g089h515r806 的头像
Submitted by g089h515r806 on 星期五, 2026-02-20 06:50

我开发的nextcrawler,使用 使用Playwright + Next.js + Prisma等主流技术搭建的网页数据采集器,项目已经开源: https://github.com/g089h515r806/nextcrawler

 

最初开发的时候,prisma还是6.x版本,最近发现prisma已经升级到了7.x版本,而且是主版本升级。决定将自己项目的prisma版本从6.x 升级到7.x,踩了不少坑。

 

当前使用的版本:

"@prisma/client": "^6.18.0",

"prisma": "^6.18.0",

 

开发的时候,这个版本已经比较高了,初步开发完了以后,出来了7.x版本,

 

准备升级,尝试了一下,不行,

 

参考了一下两篇文章:

https://www.prisma.io/docs/guides/upgrade-prisma-orm/v7

https://www.prisma.io/docs/prisma-orm/quickstart/mysql

 

一、升级程序

我用的数据库是mysql, 使用的npm

 

 

npm install @prisma/client@7

npm install -D prisma@7

 

npm install @prisma/adapter-mariadb

 

 

升级后的配置:

    "@prisma/adapter-mariadb": "^7.4.0",

    "@prisma/client": "^7.4.0",

    "prisma": "^7.4.0",

二、修改程序、配置   

schema.prisma里面:

generator client {

  provider = "prisma-client-js"

}     

 

修改为:

generator client {

  provider = "prisma-client"

  output   = "./generated/prisma"

}

 

直接运行: npx prisma generate,报错

 

Error: Prisma schema validation - (get-config wasm)

Error code: P1012

error: The datasource property `url` is no longer supported in schema files. Move connection URLs for Migrate to `prisma.config.ts` and pass either `adapter` for a direct database connection or `accelerateUrl` for Accelerate to the `PrismaClient` constructor. See https://pris.ly/d/config-datasource and https://pris.ly/d/prisma7-client-config

  -->  prisma\schema.prisma:8

   |

 7 |   provider = "mysql"

 8 |   url      = env("DATABASE_URL")

   |

 

Validation Error Count: 1

[Context: getConfig]

 

Prisma CLI Version : 7.4.0

 

创建prisma.config.js文件:

 

import { defineConfig, env } from 'prisma/config'

import 'dotenv/config'

 

export default defineConfig({

  schema: 'prisma/schema.prisma',

  datasource: {

    url: env('DATABASE_URL'),

  },

})

 

 

datasource db {

  provider = "mysql"

  url      = env("DATABASE_URL")

}

 

修改为:

datasource db {

  provider = "mysql"

}

 

再次运行npx prisma generate,成功:

Loaded Prisma config from prisma.config.mjs.

 

Prisma schema loaded from prisma\schema.prisma.

 

Generated Prisma Client (7.4.0) to .\prisma\generated\prisma in 116ms

 

修改.env文件,追加配置:

DATABASE_URL="mysql://root:123456@localhost:3306/nextcrawler1"

DATABASE_USER="root"

DATABASE_PASSWORD="123456"

DATABASE_NAME="nextcrawler1"

DATABASE_HOST="localhost"

DATABASE_PORT=3306

 

 

使用驱动程序适配器实例化 Prisma Client

 

 

修改 prisma实例化代码:

原来:

import { PrismaClient } from '@prisma/client';

 

const prisma = new PrismaClient();

export default prisma;

 

修改为:

 

import 'dotenv/config'

import { PrismaMariaDb } from '@prisma/adapter-mariadb'

import { PrismaClient } from '../prisma/generated/prisma/client'

 

const adapter = new PrismaMariaDb({

  host: process.env.DATABASE_HOST,

  user: process.env.DATABASE_USER,

  password: process.env.DATABASE_PASSWORD,

  database: process.env.DATABASE_NAME,

  connectionLimit: 5

})

const prisma = new PrismaClient({ adapter })

 

export default prisma;

 

 

三、将自动生成的prisma client ts代码,转为js版本

注意:

import { PrismaClient } from '../prisma/generated/prisma/client'

文件的路径需要设置正确, 此外,默认生成的是ts代码, 结果发现官方不支持js格式,

 

https://github.com/prisma/prisma/discussions/27596

 

https://github.com/prisma/prisma/issues/28116

 

需要安装:

pnpm add -D tsx tsup

 

 

https://www.npmjs.com/package/ts-node

 

 

解决方案:

1,升级nodejs的版本,最新版本直接支持ts,当然支持的不是特别全,大部分没问题

Update for people who will see this Node.js now officially supports TypeScript as of v25.2.0, so you do not need our implementation; you can just directly run the ts files from js files now. I have tested it and no complaints

 

2,完整ts支持,可以使用tsx

 

3,安装tsc,将ts文件编译成js文件, 我们没有使用enum,

 

 

npm add -D  typescript

 

创建 tsconfig.prisma.json文件:

 

{

  "compilerOptions": {

    "target": "ES2022",

    "module": "ESNext",

    "moduleResolution": "Node",

    "outDir": "./prisma/generated/prisma",

    "rootDir": "./prisma/generated/prisma-ts",

    "esModuleInterop": true,

    "forceConsistentCasingInFileNames": true,

    "skipLibCheck": true,

    "strict": false,

    "declaration": true,

    "resolveJsonModule": true,

  },

  "include": ["./prisma/generated/prisma-ts"]

}

 

https://www.cnblogs.com/fighxp/p/7411376.html

 

设置系统环境变量, nodejs环境变量

 

npm install -g typescript

 

确保tsc命令可用,

 

tsc --project tsconfig.prisma.json

 

 

修改为:

generator client {

  provider = "prisma-client"

  output   = "./generated/prisma-ts"

  importFileExtension  = "js"

}

 

 

npm run generateClient

 

pool timeout: failed to retrieve a connection from pool after 10008ms

    (pool connections: active=0 idle=0 limit=5)

      

 

改为:   

import 'dotenv/config'

import { PrismaMariaDb } from '@prisma/adapter-mariadb'

import { PrismaClient } from '../prisma/generated/prisma/client.js'

 

const adapter = new PrismaMariaDb({

  host: process.env.DATABASE_HOST,

  user: process.env.DATABASE_USER,

  password: process.env.DATABASE_PASSWORD,

  database: process.env.DATABASE_NAME,

  ssl: false, // set true if using SSL

  connectionLimit: 5

})

const prisma = new PrismaClient({ adapter })

 

export default prisma;

 

将ssl设置为false,即可连接数据库,

 

运行npm run dev,可以了,升级成功,


论坛: