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

Prisma db seed与TypeScript导入及type:module配置问题求助

解决Prisma Seed命令中的ES模块与ts-node冲突问题

看起来你遇到的是Node.js模块系统(CommonJS vs ES模块)和ts-node兼容性的问题,我来一步步帮你解决:

先处理Prisma的警告(非错误但建议修复)

首先看Prima给出的两个警告,先顺手解决:

  • 移除--preview-feature参数,因为prisma db seed已经正式发布(GA),直接运行npx prisma db seed即可
  • 如果你的package.json里有旧的ts-node脚本,可以直接删除,Prisma 3.0+不再需要它

核心错误原因分析

  1. 第一个错误SyntaxError: Cannot use import statement outside a module:Node.js默认使用CommonJS模块系统,而你的seed.ts用了ES模块的import语法,所以报错。
  2. 添加"type":"module"后,Node切换到ES模块模式,但ts-node默认不支持在ES模块模式下处理.ts文件,所以出现ERR_UNKNOWN_FILE_EXTENSION错误。

解决方案(选其一即可)

方案一:改用CommonJS语法(最简单,无需额外配置)

把你的prisma/seed.ts中的ES模块语法改成CommonJS:

// 替换原来的import语句
const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();

// 后续的seed逻辑保持不变,比如:
async function main() {
  // 你的seed代码
}

main()
  .catch((e) => {
    console.error(e);
    process.exit(1);
  })
  .finally(async () => {
    await prisma.$disconnect();
  });

然后:

  1. 移除package.json中的"type": "module"
  2. 运行npx prisma db seed即可

方案二:继续使用ES模块(需要配置ts-node支持)

如果你想保留ES模块的import语法,可以按以下步骤操作:

  1. 确保package.json中保留"type": "module"
  2. 修改prisma/schema.prisma中的seed命令,添加--esm参数让ts-node支持ES模块:
    generator client {
      provider = "prisma-client-js"
    }
    
    datasource db {
      provider = "postgresql" // 你的数据库类型
      url      = env("DATABASE_URL")
    }
    
    // 修改这里的seed命令
    seed dev {
      command = "ts-node --esm prisma/seed.ts"
    }
    
  3. 确保你的tsconfig.json配置正确(适配ES模块):
    {
      "compilerOptions": {
        "module": "NodeNext",
        "moduleResolution": "NodeNext",
        "target": "ES2020",
        "esModuleInterop": true
      }
    }
    
  4. 运行npx prisma db seed

方案三:先编译TS为JS再运行(最稳妥,无ts-node兼容性问题)

如果上面的方案都不行,可以绕过ts-node,先编译TS文件:

  1. 在package.json中添加一个编译seed的脚本:
    "scripts": {
      "seed:build": "tsc prisma/seed.ts --out-dir prisma/dist",
      "seed": "node prisma/dist/seed.js"
    }
    
  2. 修改prisma/schema.prisma中的seed命令:
    seed dev {
      command = "npm run seed:build && npm run seed"
    }
    
  3. 运行npx prisma db seed

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 17:57:40