webpack HtmlWebpackPlugin报错 TypeError: The ‘compilation‘ argument must be an instance of Compilation

本文记录了在使用Webpack5时遇到的TypeError问题,原因是html-webpack-plugin版本不兼容。通过分析,确定是由于webpack5和html-webpack-plugin4之间的版本冲突导致的。解决方案是降级webpack版本或者更新html-webpack-plugin到兼容版本。作者选择了更新html-webpack-plugin,通过卸载现有版本并安装5.0.0-alpha.9版本成功解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、翻车现场

TypeError: The ‘compilation’ argument must be an instance of Compilation

ERROR in TypeError: The ‘compilation’ argument must be an instance of Compilation

  • JavascriptModulesPlugin.js:119 getCompilationHooks
    [webpack-demo]/[_webpack@5.6.0@webpack]/lib/javascript/JavascriptModulesPlugin.js:119:10

  • CommonJsChunkFormatPlugin.js:30
    [webpack-demo]/[_webpack@5.6.0@webpack]/lib/javascript/CommonJsChunkFormatPlugin.js:30:19

  • Hook.js:14 Hook.CALL_DELEGATE [as _call]
    [npm]/[webpack]/[_tapable@2.1.1@tapable]/lib/Hook.js:14:14

  • Compiler.js:942 Compiler.newCompilation
    [npm]/[webpack]/lib/Compiler.js:942:30

  • Compiler.js:984
    [npm]/[webpack]/lib/Compiler.js:984:29

  • Hook.js:18 Hook.CALL_ASYNC_DELEGATE [as _callAsync]
    [npm]/[webpack]/[_tapable@2.1.1@tapable]/lib/Hook.js:18:14

  • Compiler.js:979 Compiler.compile
    [npm]/[webpack]/lib/Compiler.js:979:28

  • Compiler.js:494 Compiler.runAsChild
    [npm]/[webpack]/lib/Compiler.js:494:8
    webpack 5.6.0 compiled with 1 error in 1055 ms

二、原因分析

是webpack5和html-webpack-plugin4的版本兼容问题,我使用cnpm install -D html-webpack-plugin 安装的版本是4.5.0。

三、解决方案

解决方案有两个:一个是将webpack降低为4点几的版本,那么另一个解决方案是改边html-webpack-plugin的版本。
这里我选择的是改变html-webpack-plugin的版本。步骤如下:
1.卸载已安装的html-webpack-plugin的依赖

cnpm uninstall html-webpack-plugin

如果通过上面的命令无法卸载的话,就手动去package.json文件中删除(如下图),然后删除node_modules,再通过cnpm install命令 重新安装依赖。
在这里插入图片描述
2.安装指定版本的html-webpack-plugin

cnpm install html-webpack-plugin@5.0.0-alpha.9

到这里就已经解决了,可以运行webpack命令打包试一下。

如果对你有帮助,请给我一个👍以示鼓励😘

<think>嗯,用户遇到了webpackTypeError: Cannot read properties of undefined (reading 'call')错误。我需要帮他解决这个问题。首先,我得回想一下这个错误的常见原因。通常,这种错误发生在模块依赖关系有问题的时候,比如模块未正确导出,或者循环依赖。 可能的原因之一是导出的模块存在问题。比如,某个模块可能没有正确导出,导致其他模块在引入时得到undefined。这时候,检查模块的导出语句是否正确,比如是否使用了module.exports或export default。用户需要检查相关模块的导出和导入语法是否正确,确保没有拼写错误或者路径错误。 另一个可能性是循环依赖。如果模块A依赖模块B,而模块B又反过来依赖模块A,可能会导致其中一个模块在加载时尚未初始化,从而引发这个错误。这时候需要检查项目中的模块依赖关系,是否存在循环引用的情况,并尝试重构代码来打破这种循环。 Webpack配置问题也可能导致这个错误。特别是当使用CommonsChunkPlugin或者SplitChunksPlugin时,如果配置不当,可能导致模块加载顺序出错。检查webpack.config.js中的相关配置,确保插件使用正确,没有错误的入口文件或输出设置。 还有可能是第三方库的问题。某些第三方库可能未正确打包,或者版本不兼容。这时候,可以尝试更新或重新安装相关依赖,或者检查是否有已知的兼容性问题。使用npm或yarn进行依赖的清理和重新安装可能会有帮助。 此外,代码中的异步加载或动态导入如果有问题,也可能导致这个错误。例如,动态导入的模块路径错误,或者没有正确处理Promise。需要检查所有动态导入的地方,确保路径正确,并且使用async/await或.catch()处理可能的错误。 最后,如果问题依然存在,可能需要检查webpack的版本。某些情况下,旧版本的webpack可能存在已知的bug,升级到最新版本或许能解决问题。同时,查看webpack的官方文档和GitHub的issue,是否有类似的问题和解决方案。 总结下来,解决步骤大致是:检查模块导出导入、排查循环依赖、审查webpack配置、处理第三方库、检查动态导入、更新webpack版本。用户可以根据这些步骤逐一排查,定位问题所在。</think>### WebpackTypeError: Cannot read properties of undefined (reading 'call') 的解决方案 此错误通常与模块依赖关系或代码导出/导入方式有关。以下是逐步排查和解决方法: --- #### 1. **检查模块导出和导入** - **未正确导出模块**:确保模块使用`module.exports`或`export default`正确导出。 ```javascript // 正确导出示例 const myFunction = () => {}; module.exports = myFunction; // CommonJS // 或 export default myFunction; // ES6 ``` - **导入路径错误**:检查导入路径是否拼写正确,避免使用相对路径时层级错误[^1]。 --- #### 2. **排查循环依赖** 若模块A依赖模块B,同时模块B又依赖模块A,可能导致加载时未初始化。 - **重构代码**:将公共逻辑提取到第三方模块。 - **工具检测**:使用`madge`工具检测循环依赖: ```bash npx madge --circular ./src ``` --- #### 3. **审查Webpack配置** - **入口文件配置**:确保`webpack.config.js`中`entry`指向正确的文件。 - **插件兼容性**:某些插件(如`CommonsChunkPlugin`)过时或配置错误可能导致此问题。建议使用`SplitChunksPlugin`替代: ```javascript optimization: { splitChunks: { chunks: 'all', }, } ``` --- #### 4. **第三方库问题** - **重新安装依赖**:删除`node_modules`后执行`npm install`或`yarn install`。 - **版本兼容性**:检查第三方库是否与Webpack版本兼容,例如`babel-loader`和`webpack 5`需配合使用。 --- #### 5. **异步加载模块问题** 动态导入(如`import()`)未正确处理时可能引发此错误: ```javascript // 错误示例:未处理动态导入的Promise import('./module').then(module => module.init()); // 正确示例:使用async/await const initModule = async () => { const module = await import('./module'); module.init(); }; ``` --- #### 6. **升级Webpack版本** 某些旧版本存在已知问题,升级到最新稳定版可能解决: ```bash npm install webpack@latest ``` --- #### 示例修复后的配置片段 ```javascript // webpack.config.js module.exports = { entry: './src/index.js', output: { filename: 'bundle.js', path: __dirname + '/dist', }, optimization: { splitChunks: { chunks: 'all', }, }, resolve: { extensions: ['.js', '.json'], // 明确文件扩展名 }, }; ``` ---
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值