You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vercel部署时Linting与类型校验失败但本地构建正常

问题成因

这个问题和Vercel环境类型校验更严格没有关系,本质是本地和Vercel构建环境的Prisma Client类型定义不一致,加上本地构建默认跳过了类型检查导致的环境差异:

  • create-t3-app初始化的项目默认在next.config.mjs中做了构建优化:本地开发环境下会默认跳过TypeScript类型校验和ESLint检查,避免每次构建等待时间过长,这就是你本地执行next build、vercel build都不报错的直接原因。
  • Vercel部署环境不会读取本地的跳过配置,安装依赖后会自动执行prisma generate基于仓库内最新的schema.prisma生成全量Prisma Client类型,之后执行严格的类型校验。报错提示password不存在于UserSelect类型中,只有一个核心原因:当前提交到仓库的schema.prisma里,User模型没有定义password字段,或者该字段加了@ignore注解被Prisma排除在生成的类型之外。
  • 你本地写代码时能正常引用password字段,是因为之前本地加该字段时执行过prisma generate,后续修改schema后没有重新生成客户端类型,本地一直用的是旧的带password字段的类型缓存。
解决方案

按以下步骤排查修复即可:

  1. 先核对仓库内的prisma/schema.prisma文件,确认User模型中存在password字段定义,且没有加@ignore注解,参考配置:
model User {
  id            String    @id @default(cuid())
  name          String?
  email         String?   @unique
  emailVerified DateTime?
  image         String?
  password      String? // 确认该行存在
  accounts      Account[]
  sessions      Session[]
}
  1. 本地清除旧的Prisma缓存,重新生成最新的客户端类型:
rm -rf node_modules/.prisma
npx prisma generate
  1. 打开项目根目录的next.config.mjs,临时关闭构建时的类型、ESLint跳过配置,让本地构建和Vercel环境校验规则对齐:
/** @type {import("next").NextConfig} */
const config = {
  // 其他原有配置保持不变
  typescript: {
    ignoreBuildErrors: false,
  },
  eslint: {
    ignoreDuringBuilds: false,
  },
};

export default config;
  1. 本地执行npm run build(对应next build命令),此时如果类型有问题会直接在本地复现,和Vercel端报错一致。
  2. 检查.gitignore配置,确认没有把prisma/schema.prisma加入忽略列表,避免提交到仓库的是缺失字段的旧版本schema。
  3. 本地构建校验通过后,把所有改动提交推送到仓库,重新触发Vercel构建即可。修复完成后可以把next.config.mjs里的跳过规则改回原有配置,不影响部署校验。

内容的提问来源于stack exchange,提问作者AndreasWT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 18:39:18