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

如何在NestJS中使用ESNext?配置后运行出现模块找不到错误

NestJS启用ESNext后运行时出现Cannot find module的解决办法

问题本质

启用ESNext模块系统并在package.json中配置"type": "module"后,Node.js对ES模块的导入有严格要求:必须使用带完整后缀(如.js)的路径。但默认的TypeScript编译配置不会自动给导入路径添加后缀,导致运行时找不到模块。NestJS本身完全兼容ESNext,问题出在配置适配环节。

修复步骤

  • 调整模块解析与编译配置
    在tsconfig.json的compilerOptions中添加或修改以下配置:

    "module": "NodeNext",
    "moduleResolution": "NodeNext",
    "resolveJsonModule": true,
    "esModuleInterop": true
    
    • module: NodeNext和moduleResolution: NodeNext:让TypeScript按照Node.js的ES模块规则处理导入路径,编译时自动补充.js后缀
    • resolveJsonModule:确保能正确导入JSON格式的配置文件
    • esModuleInterop:消除CommonJS模块与ES模块之间的兼容性问题
  • 确认启动命令正确性
    编译完成后,直接用Node.js运行dist目录下的入口文件,比如:

    node dist/main.js
    

    避免使用ts-node这类工具,它们对ES模块的处理逻辑可能和纯Node环境不一致。

  • 检查package.json配置
    确保"type": "module"处于package.json的顶层位置,同时启动脚本指向正确的编译后文件,示例:

    "scripts": {
      "start:prod": "node dist/main.js"
    }
    

完整可用的tsconfig.json

{
  "extends": "@tsconfig/node16/tsconfig.json",
  "compilerOptions": {
    "baseUrl": "./",
    "declaration": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "incremental": true,
    "lib": ["ESNext"],
    "module": "NodeNext",
    "moduleResolution": "NodeNext",
    "noEmitOnError": true,
    "outDir": "dist",
    "removeComments": true,
    "resolveJsonModule": true,
    "esModuleInterop": true,
    "sourceMap": true,
    "target": "ESNext"
  },
  "include": ["src/**/*"]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 18:40:32