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

NextJS+TS项目执行Prisma db seed时遇ESM模块兼容错误

解决Prisma Seed中ESM与CommonJS兼容问题

问题背景

基于TypeScript、Prisma和Next.js的项目,执行yarn prisma db seed时遇到模块兼容错误:

  • 运行seed脚本时出现Error [ERR_REQUIRE_ESM]: require() of ES Module,原因是prisma/seed.ts导入的../src/server/db/client依赖了.mjs文件
  • 调整ts-node编译选项后,又出现SyntaxError: Cannot use import statement outside a module,无法同时兼容TypeScript文件和.mjs文件的导入

可行解决方案

1. 更新package.json配置

修改scripts中的ts-node命令,添加ESM支持和模块解析选项,同时确保prisma的seed命令正确:

{
  "name": "...",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "ts-node": "ts-node --esm --experimental-specifier-resolution=node --compiler-options '{\"module\": \"ESNext\", \"moduleResolution\": \"node\"}'",
    // 其他原有脚本保持不变
  },
  // 依赖项保持不变
  "prisma": {
    "seed": "yarn ts-node prisma/seed.ts"
  }
}

2. 优化tsconfig.json的ts-node配置

调整ts-node字段,明确启用ESM模式并指定模块解析策略:

{
  "compilerOptions": {
    // 原有配置保持不变
    "module": "esnext",
    "moduleResolution": "node"
  },
  "ts-node": {
    "esm": true,
    "experimentalSpecifierResolution": "node",
    "compilerOptions": {
      "module": "ESNext",
      "moduleResolution": "node"
    }
  },
  "include": ["next-env.d.ts", "types/**/*.ts", "next-auth.d.ts", "**/*.ts", "**/*.tsx", "**/*.js", "**/*.cjs", "**/*.mjs"],
  "exclude": ["node_modules"]
}

3. 验证seed脚本

prisma/seed.ts无需修改,保持原有导入逻辑即可:

import { prisma } from '../src/server/db/client';

const main = async () => {
  console.log('seeding');
  // 在此添加你的具体seed数据逻辑
};

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

4. 执行seed命令

运行以下命令测试:

yarn prisma db seed

原理说明

  • --esm参数让ts-node以ESM模式运行,原生支持import语句
  • --experimental-specifier-resolution=node启用Node.js风格的模块解析规则,兼容.mjs文件的导入
  • 统一module和moduleResolution配置为ESNext和node,确保TypeScript代码与ESM模块的解析逻辑一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:20:24