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

Nuxt部署DigitalOcean时,Prisma Client自定义枚举导入失败

解决方案

1. 强制Prisma生成ES模块客户端

在prisma/schema.prisma中修改generator配置,指定生成ES模块格式的客户端,规避CommonJS与ES模块的导出冲突:

generator client {
  provider = "prisma-client-js"
  output = "./node_modules/.prisma/client"
  module = "ESNext" // Prisma 4.16+ 支持该参数,生成ES模块格式客户端
}

执行npx prisma generate重新生成客户端后再部署。

2. 适配CommonJS模块的导入规则

若无法生成ES模块,可将命名导入改为默认导入后解构,绕过CommonJS命名导出限制:

import Prisma from '@prisma/client'
const { Roles, PrismaClient } = Prisma

如果你的代码是自动生成无法修改,可在Nuxt配置中调整Webpack解析规则,让其正确识别CommonJS的命名导出:

// nuxt.config.ts
export default defineNuxtConfig({
  build: {
    extend(config) {
      config.module.rules.push({
        test: /\.js$/,
        include: /node_modules\/@prisma\/client/,
        parser: {
          commonjs: {
            namedExports: ['Roles', 'PrismaClient']
          }
        }
      })
    }
  }
})

3. 确保生产环境Prisma Client正确生成

调整部署脚本顺序

在package.json中配置postbuild钩子,确保构建后自动生成客户端并执行数据库迁移:

"scripts": {
  "build": "nuxt build",
  "postbuild": "npx prisma generate && npx prisma migrate deploy",
  "start": "nuxt start"
}

DigitalOcean部署时只需执行npm run build && npm run start,postbuild会自动触发。

保留生成的客户端文件

确认.gitignore中未排除.prisma目录,避免部署时生成的客户端文件缺失;若使用DigitalOcean自动部署,需确保构建环境完整保留node_modules/.prisma目录。

4. 对齐环境版本与依赖配置

  • 确保生产环境Node.js版本与本地一致,且符合Prisma版本要求(如Prisma 5.x需Node.js 16.13+),可在package.json中指定版本约束:
"engines": {
  "node": ">=18.x"
}
  • 将prisma和@prisma/client都放在dependencies中,避免生产环境依赖缺失:
"dependencies": {
  "@prisma/client": "^5.x.x",
  "prisma": "^5.x.x",
  // 其他项目依赖
}

5. 清理部署缓存

在DigitalOcean部署时添加缓存清理步骤,避免旧依赖或缓存导致的异常:

npm cache clean --force && npm install && npm run build && npm run start

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 11:47:34