在升级我正在维护的同时支持Webpack 4和5的插件时,我遇到了下面的砖墙,我根本找不到任何信息,Gitter上似乎也没有人能提供帮助。
该插件向compilation.assets
添加了一个资产(SVG spritemap),该资产可以正常工作。插件中有一个功能,允许用户保留创建的块,这是与其他插件互操作所必需的。Webpack 4的最低工作代码应该是这样的(我一直觉得有点粗糙,但它确实有效♂️):
// OutputOptions.chunk.name would equal 'spritemap' in this example
const chunk = compilation.addChunk(outputOptions.chunk.name);
const module = new RawModule('', `${outputOptions.chunk.name}-dummy-module`);
chunk.addModule(module);
对Webpack 5使用相同的方法会引发以下错误:
ERROR in spritemap.js
No code generation entry for spritemap-dummy-module (existing entries: <path-to>/svg-spritemap-webpack-plugin/examples/simple/src/index.js)
它还显示了Chunk.addModule
的弃用警告,我可以通过使用compilation.chunkGraph.connectChunkAndModule(chunk, module);
来修复它,但这(显然)并不能消除代码生成条目错误。
我最终发布了与GitHub问题相同的问题,因为我在Gitter和Stack Overflow上没有收到任何回复。Tobias Koppers向我提出了一个建议,以确保该模块添加到compilation.modules
中。因此,最终这个特定的问题通过以下代码得到了解决:
compilation.modules.add(module);