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

Webpack4+TypeScript项目如何强制仅导入CJS模块而不加载ESM模块

解决方案

方式1:全局禁用所有第三方库的module字段入口

webpack默认会按照优先级读取package.json的入口字段,web环境下webpack4的默认优先级为['browser', 'module', 'main'],你只需要调整resolve.mainFields配置,移除module字段即可,修改后的webpack配置如下:

// 在webpack.config.js的module.exports中新增resolve配置
module.exports = {
  // 保留你原有的所有配置项(entry、output、module等)
  resolve: {
    // 调整入口字段优先级,移除ESM专属的module字段
    mainFields: ['browser', 'main'],
    // 建议补充扩展名配置,避免ts/tsx文件导入报错
    extensions: ['.ts', '.tsx', '.js', '.json']
  },
  // 原有其他配置保持不变
}

配置后webpack加载所有第三方包时都会优先读取main字段指定的CommonJS入口,不会再加载module字段对应的ESM入口。

方式2:仅针对@reduxjs/toolkit单独禁用ESM入口

如果你不想影响其他第三方库的ESM加载,也可以用alias单独指定该库的入口:

const path = require('path') // 确保你已经引入了path模块

module.exports = {
  // 原有配置保留
  resolve: {
    alias: {
      '@reduxjs/toolkit': path.resolve(__dirname, 'node_modules/@reduxjs/toolkit/dist/index.js')
    },
    extensions: ['.ts', '.tsx', '.js', '.json']
  }
}

补充方案:直接修复依赖缺失问题

你遇到的报错本质是@reduxjs/toolkit的ESM入口将immer列为peer依赖,没有内置打包,你也可以直接安装缺失的依赖解决问题,不需要修改webpack配置:

npm install immer
# 或者用yarn
yarn add immer

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:57:02