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

Webpack 5如何将自定义Loader识别为ES模块而非CommonJS?

如何让Webpack将自定义Loader视为ES模块

要让Webpack识别你的ES模块格式自定义Loader,解决require() of ES Module的报错,你可以通过以下几种方式实现:

方法1:在Loader的package.json中声明模块类型

如果你的Loader是独立的npm包,在Loader目录下的package.json中添加"type": "module"字段,Webpack会自动将其识别为ES模块:

{
  "name": "my-loader",
  "type": "module"
}

方法2:在Webpack配置中显式指定Loader类型

在webpack.config.js的rules配置里,将loader改为对象形式,显式设置type: "module",告诉Webpack这是一个ES模块Loader:

// webpack.conf.js
const path = require('path');

module.exports = {
  mode: 'development',
  entry: './src/app.js',
  output: {
    filename: 'app.js',
    path: path.resolve(__dirname, 'dist'),
    clean: true,
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        use: [
          {
            loader: 'my-loader',
            type: 'module' // 关键配置:指定Loader为ES模块
          }
        ],
      },
    ],
  },
  resolveLoader: {
    alias: {
      'my-loader': '/home/projects/webpack-webpack-js-org-7gmdc8/my-loader/main.mjs',
    },
  },
};

方法3:确保文件扩展名与模块类型匹配

使用.mjs扩展名的文件默认会被Node.js视为ES模块,但需要结合上面两种方法之一,让Webpack同步这个识别逻辑,确保正确加载.mjs格式的Loader。

问题根源

你遇到的报错是因为Webpack的loader-runner默认按CommonJS加载Loader,而你的Loader采用ES模块语法。由于你没有通过配置或package.json声明模块类型,loader.type为undefined,不满足loader.type === "module"的判断条件,导致require()尝试加载ES模块,触发ERR_REQUIRE_ESM错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:36:30