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

如何在NextJS的TypeScript文件中正确使用ES6 Modules语法

问题根因

该冲突由Node.js模块规则、TypeScript执行逻辑和Prisma默认seed调用逻辑不匹配导致:

  • 未在package.json配置"type": "module"时,Node.js默认将.ts/.js文件识别为CommonJS模块,不支持顶层import语法,触发import无法识别的报错
  • 配置"type": "module"后,Node.js原生ESM加载器不识别.ts后缀文件,触发未知文件后缀报错
解决方案

方案1:全项目启用ESM(推荐)

无需改动TS代码中的ESM语法,调整执行配置即可:

  1. 保留package.json中的"type": "module"配置
  2. 安装必要依赖:
    npm install ts-node typescript @types/node --save-dev
  3. 修改package.json中prisma的seed配置项:
    将原有seed命令替换为:
    "node --no-warnings --loader ts-node/esm prisma/seed.ts"
  4. 确认tsconfig.json中包含以下配置:
{
  "compilerOptions": {
    "target": "ESNext",
    "module": "ESNext",
    "moduleResolution": "Node",
    "esModuleInterop": true
  }
}

配置完成后重新运行seed命令即可正常执行。

方案2:仅TS层支持ESM语法,项目保持CommonJS模式

如果不想将整个项目切换为ESM模式,可以用TS编译适配:

  1. 删除package.json中的"type": "module"配置
  2. 调整tsconfig.json配置:
{
  "compilerOptions": {
    "target": "ESNext",
    "module": "CommonJS",
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true
  }
}
  1. 保持seed命令为ts-node prisma/seed.ts即可,TS代码中可正常使用import/export语法,运行时会自动编译为CommonJS格式执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:06:03