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

Webpack5 Asset Module中Module.issuer弃用警告及获取compilation方法问询

解决Webpack Module.issuer废弃警告的方案

问题分析

你当前的Webpack图片规则中,通过module.issuer.resource判断图片是否被Less或Vue样式引入,以此决定是否转base64,但该API已被废弃,官方要求改用compilation.moduleGraph.getIssuer(module)。但dataUrlCondition的回调参数中没有直接提供compilation对象,无法直接调用新API。

推荐解决方案:拆分规则(无需依赖废弃API)

利用Webpack规则的issuer字段直接匹配引入图片的文件,将两种场景拆分为独立规则,完全避开废弃API的使用:

module.exports = {
  module: {
    rules: [
      // 规则1:匹配被Less或Vue样式引入的图片,直接转为base64
      {
        test: /\.(png|jpe?g|gif|bmp|svg|webp)(\?.*)?$/, // 修正原配置中bpm的笔误为bmp
        issuer: [
          /\.less$/,
          /\.vue&type=style/
        ],
        type: 'asset/inline'
      },
      // 规则2:匹配其他场景的图片,按文件大小判断是否转base64
      {
        test: /\.(png|jpe?g|gif|bmp|svg|webp)(\?.*)?$/,
        type: 'asset',
        parser: {
          dataUrlCondition: {
            maxSize: 8092 // 对应原配置的8092字节阈值
          }
        },
        // 可添加其他配置如generator等
        // ...
      }
    ]
  }
}

备选方案:通过插件获取moduleGraph(不推荐,时机易出问题)

如果必须保留单规则逻辑,可以通过自定义Webpack插件将moduleGraph关联到模块上,但需注意dataUrlCondition的执行时机可能早于模块注册到moduleGraph的时间,存在获取不到issuer的风险:

1. 编写自定义插件

class ModuleGraphHelperPlugin {
  apply(compiler) {
    compiler.hooks.compilation.tap('ModuleGraphHelperPlugin', (compilation) => {
      const moduleGraph = compilation.moduleGraph;
      // 监听模块解析钩子,给模块添加获取issuer的方法
      compilation.hooks.normalModuleParser.tap('ModuleGraphHelperPlugin', (parser, module) => {
        module.getIssuerFromGraph = () => moduleGraph.getIssuer(module);
      });
    });
  }
}

2. 在Webpack配置中使用插件并修改规则

module.exports = {
  plugins: [new ModuleGraphHelperPlugin()],
  module: {
    rules: [
      {
        test: /\.(png|jpe?g|gif|bmp|svg|webp)(\?.*)?$/,
        type: 'asset',
        parser: {
          dataUrlCondition: function(source, { module }) {
            const issuer = module.getIssuerFromGraph?.();
            if (issuer && /\.less|vue&type=style/.test(issuer.resource)) {
              return true;
            }
            return source.length < 8092;
          }
        },
        // ...其他配置
      }
    ]
  }
}

注意事项

  • 原配置中的bpm是笔误,应为bmp(位图格式的正确后缀),建议修正避免匹配错误。
  • 拆分规则的方式更符合Webpack的设计逻辑,且无需担心API兼容性问题,是优先选择的方案。

内容的提问来源于stack exchange,提问作者jiande.gao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:09:30