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

NX Monorepo中Webpack无法解析ESM模块导入的问题

解决NX Monorepo中TypeScript+Webpack ESM导入的.js后缀问题

核心问题

ESM规范要求相对导入必须带完整文件后缀,但Webpack会严格按照导入路径查找文件,而你的源文件是.ts格式,导致Webpack找不到对应.js文件报错。

解决方案1:配置Webpack的resolve.alias映射后缀

在项目的Webpack配置文件中,添加别名规则,将带.js后缀的导入路径映射到对应的.ts文件:

module.exports = {
  resolve: {
    // 正则匹配:将所有以.js结尾的导入路径替换为.ts
    alias: {
      '^(.+)\\.js$': '$1.ts'
    },
    // 确保Webpack能解析TypeScript和JavaScript文件
    extensions: ['.ts', '.tsx', '.js', '.jsx']
  },
  module: {
    rules: [
      // 配置TypeScript解析器
      {
        test: /\.tsx?$/,
        use: 'ts-loader',
        exclude: /node_modules/
      }
    ]
  }
};

如果是NX monorepo,可在项目的project.json中指定自定义Webpack配置:

{
  "targets": {
    "build": {
      "options": {
        "webpackConfig": "./webpack.config.js"
      }
    }
  }
}

解决方案2:调整TypeScript配置配合Webpack解析

修改tsconfig.json,确保编译后的ESM文件能正确映射源文件,同时让Webpack自动处理后缀:

  1. 确保tsconfig.json的编译选项:
{
  "compilerOptions": {
    "module": "ESNext",
    "moduleResolution": "node",
    "allowImportingTsExtensions": false,
    "resolveJsonModule": true,
    "outDir": "./dist",
    "strict": true
  },
  "include": ["src/**/*"]
}
  1. 在Webpack配置中启用resolve.extensions的自动补全:
module.exports = {
  resolve: {
    extensions: ['.ts', '.js'],
    // 强制导入带后缀,符合ESM规范
    enforceExtension: true
  },
  // ...其他module配置
};

解决方案3:使用NX的内置配置调整

如果你不想自定义Webpack配置,可在NX的project.json中调整TypeScript和Webpack的集成选项:

{
  "targets": {
    "build": {
      "executor": "@nrwl/webpack:webpack",
      "options": {
        "target": "web",
        "outputPath": "dist/apps/nxnest",
        "tsConfig": "apps/nxnest/tsconfig.app.json",
        "main": "apps/nxnest/src/main.ts",
        "assets": ["apps/nxnest/src/assets"],
        "webpackConfig": "@nrwl/webpack/webpack.config"
      }
    }
  }
}

验证配置

修改配置后,重新执行构建命令:

nx build nxnest

配置正确的话,Webpack会自动将.js后缀的导入映射到.ts源文件,同时TSC编译时会生成带正确.js后缀的ESM文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:01:05