如何修复Chunk.modulesIterable的弃用警告?

问题描述

我是external-svg-sprite-loader的维护者,并且注意到与webpack 5一起使用时,出现以下警告:

[DEP_WEBPACK_CHUNK_MODULES_IteraBLE] DeprecationWarning: Chunk.modulesIterable: Use new ChunkGraph API

构建通过,但我希望能够修复此弃用警告。但是,我找不到有关modulesIterable或ChunkGraph API的任何文档。我应该在哪里寻找它?该问题的潜在解决方案是什么?

解决方法

如果要遍历块中的模块,可以这样做:

compilation.chunks.forEach(chunk => {
  compilation.chunkGraph.getChunkModules(chunk).forEach((module) => {
    // module is available here
  })
});

您可以在其source code中找到此类的其他有用方法。如果要分块地操作模块,则最好使用ModuleGraph类。例如:

compilation.chunks.forEach(chunk => {
  compilation.chunkGraph.getChunkModules(chunk).forEach((module) => {
    const exportInfo = compilation.chunkGraph.moduleGraph.getExportInfo(module);
  })
});
,

external-svg-sprite-loader使用的Chunk.modulesIterable (ref)已贬值并由ChunkGraph

取代

该软件包具有webpack ^ 4.1.0(ref)的对等依赖性,因此您可以将Webpack降级为4. *以消除警告,也可以要求软件包维护者添加对Webpack 5的支持。

您可以找到官方折旧说明here

,

我遇到了这个问题,因为我正在使用compilation.hooks.optimizeChunks遍历编译中的所有模块。经过研究,我发现我可以使用compilation.hooks.optimizeModules来达到相同的结果。因此,我切换到后者,并停止收到问题中提到的弃用警告。我要说的是,这比遍历大块的模块是更好的解决方案,因为webpack似乎已经在内部进行了此操作。