GitLab CI构建NestJS+Prisma项目时报TS2305:找不到User导出成员
NestJS + Prisma GitLab CI构建报错TS2305:模块'@prisma/client'无导出成员'User'
在配置使用Prisma的NestJS项目GitLab CI流水线时,出现TS2305: Module '@prisma/client' has no exported member 'User'错误。本地执行pnpm run build可正常完成,且已手动确认Prisma生成的index.d.ts中已将User作为类型导出。
相关配置与代码
.gitlab-ci.yml
image: node:latest stages: - build build: stage: build before_script: - corepack enable - corepack prepare pnpm@latest-8 --activate - pnpm config set store-dir .pnpm-store script: - pnpm install - npx prisma generate - pnpm run build cache: key: files: - pnpm-lock.yaml paths: - .pnpm-store artifacts: paths: - dist
user.models.ts
import { User } from "@prisma/client"; // CI构建失败的触发行 import { IsEmail, IsInt, IsNotEmpty, IsString } from "class-validator"; class UserModel implements User { @IsNotEmpty() @IsInt() id: number; @IsNotEmpty() @IsString() @IsEmail() email: string; @IsNotEmpty() @IsString() password: string; }
手动验证脚本
cd ./node_modules/.prisma/client cat index.d.ts cd ../../..
解决方法
- 用pnpx替代npx执行Prisma生成:避免包管理器环境不一致导致的生成问题,修改CI脚本中的命令为
pnpx prisma generate - 清理缓存并强制重新安装:GitLab CI缓存可能保留旧的客户端文件,在
pnpm install前添加清理步骤:pnpm store prune pnpm install --force - 指定Prisma生成输出路径:在
prisma/schema.prisma中明确输出路径,确保生成文件位置正确:generator client { provider = "prisma-client-js" output = "./node_modules/@prisma/client" } - 检查TypeScript配置:确保
tsconfig.json的include数组包含Prisma生成的类型文件:{ "include": [ "src/**/*", "node_modules/.prisma/client/**/*" ] } - 清理旧生成文件后重新生成:在CI脚本中先删除旧的客户端文件,再执行生成命令:
pnpm install rm -rf node_modules/.prisma/client pnpx prisma generate pnpm run build
内容的提问来源于stack exchange,提问作者Jackson Fleming
相关产品推荐
相关产品推荐

