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

Typescript ESM模块解析在nodemon开发环境中失效问题

解决方案:区分开发/生产环境的路径映射配置

核心问题是共用一套TS配置导致开发和生产的路径映射冲突,以下是具体解决步骤:

1. 拆分TS配置文件

将公共配置和环境专属配置分离,避免路径映射冲突:

基础配置文件 tsconfig.base.json

存放所有环境共用的配置:

{
  "compilerOptions": {
    "target": "ESNext",
    "module": "NodeNext",
    "moduleResolution": "NodeNext",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules", "build"]
}

开发环境配置 tsconfig.dev.json

扩展基础配置,将路径映射指向src,同时配置ts-node的ESM支持:

{
  "extends": "./tsconfig.base.json",
  "compilerOptions": {
    "paths": {
      "#src/*": ["./src/*"]
    },
    "ts-node": {
      "esm": true,
      "require": ["tsconfig-paths/register"]
    }
  }
}

生产环境配置 tsconfig.prod.json

扩展基础配置,将路径映射指向构建后的build目录:

{
  "extends": "./tsconfig.base.json",
  "compilerOptions": {
    "paths": {
      "#src/*": ["./build/*"]
    },
    "outDir": "./build"
  }
}

2. 调整nodemon启动命令

让nodemon明确使用开发环境的TS配置,确保ts-node加载正确的路径规则:

修改package.json的scripts:

{
  "scripts": {
    "start:dev": "nodemon --exec 'ts-node --project tsconfig.dev.json' src/index.ts",
    "build": "tsc --project tsconfig.prod.json"
  }
}

或者创建独立的nodemon.json配置文件:

{
  "watch": ["src"],
  "ext": "ts,json",
  "exec": "ts-node --project tsconfig.dev.json src/index.ts"
}

3. 配置package.json的条件imports

Node.js的ESM规范支持条件导入,在package.json中添加环境区分的映射,确保Node.js层面也能正确解析路径:

{
  "type": "module",
  "imports": {
    "#src/*": {
      "development": "./src/*",
      "production": "./build/*"
    }
  }
}

4. 安装必要依赖

确保安装tsconfig-paths来辅助ts-node在ESM模式下处理路径映射:

npm install tsconfig-paths --save-dev

完成以上配置后,运行npm run start:dev时,nodemon会通过ts-node加载开发环境的TS配置,路径映射指向src目录;生产构建后,TS配置和package.json的imports都会指向build目录,解决模块找不到的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:35:02