Lazy loaded image
技术分享
5️⃣关于本地运行和部署
Words 630Read Time 2 min
2021-7-2
2025-6-17
type
status
date
slug
summary
tags
category
icon
password

🎯 为什么本地没问题,部署就出错?

1. TypeScript 严格模式或构建检查差异

  • 本地你可能跑的是 next dev,它默认 容忍一些类型错误、隐式 any、ES 兼容问题
  • 部署使用的是 next build,它会严格执行:
    • tsconfig.json 的设置(比如 noImplicitAny, strictNullChecks
    • 类型推断错误
    • 构建失败时直接阻止上线
解决方法
  • 在本地执行一次 npm run build,提前发现问题。
  • 确保 tsconfig.json 设置一致,不要本地关掉 strict 却部署打开。

2. Prisma schema / 数据库同步问题

  • 你本地的 Prisma schema 可能和数据库是同步的。
  • 部署环境:
    • 没有正确执行 npx prisma generate
    • 没有跑 npx prisma migrate deploy
    • 缺少唯一索引导致 skipDuplicates 报错
解决方法
  • 确保你在部署前执行:
    • 检查 prisma/schema.prisma 是否被正确提交和部署。

    3. 环境变量不同

    • 本地 .env 文件存在,部署环境没有设置 JWT_SECRETDATABASE_URL 等,导致运行失败。
    • Vercel、Render、Railway 等平台默认不会读取 .env,你需要手动配置环境变量。
    解决方法
    • 检查部署平台的环境变量设置,确认所有 .env 中的变量都已设置。

    4. 文件路径大小写错误(Linux 与 macOS/Windows 差异)

    • 本地文件系统大小写不敏感(如 macOS/Windows),部署(如 Linux)大小写敏感。
    • 比如你写了 import { prisma } from '@/Lib/prisma',本地没事,部署就 404。
    解决方法
    • 文件路径大小写严格统一。
    • 使用 ESLint + import 校验插件检查路径大小写。

    5. 某些依赖/模块未安装或版本不兼容

    • 本地用 npm,部署用 yarn,或 lock 文件不一致。
    • 某些依赖是本地安装但没有写入 package.json
    解决方法
    • 使用固定版本依赖,提交 package-lock.jsonyarn.lock
    • 在部署前执行 npm ci 而非 npm install,避免差异

    ✅ 建议你这样做:

    1. 在本地运行:
      1. 不要只用 npm run dev,因为它不会报类型错误!
    1. 检查 tsconfig.json
      1. 检查你部署平台的:
          • 环境变量
          • 文件系统是否大小写敏感
          • 是否执行了 prisma generateprisma migrate
      上一篇
      NextJS学习笔记
      下一篇
      node多版本如何管理