Error in created hook: “TypeError: Cannot read properties of undefined (reading ‘xxx‘)“

报错信息: Error in created hook: "TypeError: Cannot read properties of undefined (reading 'resetData')"

错误原因分析:
在 created 生命周期钩子中调用resetData(),但此时resetData()还没有被定义(为 undefined)
因为:
created 钩子执行时,DOM 还未渲染完成
resetData() 是一个对组件的引用,只能在 mounted 或之后的生命周期中访问
所以当程序在 created 中调用 .resetData() 就会报错

正确做法:将调用移至 mounted 生命周期中即可:

mounted() {
  this.$refs.xxxVue.resetData();
},
created() {
  // 不要在这里调用 resetData()
}

我是在系统跨组件调用时,在子组件内报错,这种情况一般是在父组件请求接口去取值再传给子组件时,接口未返回值,而子组件已经渲染造成的。

✖ Webpack Compiled with some errors in 7.86s <i> [webpack-dev-server] Project is running at: <i> [webpack-dev-server] On Your Network (IPv4): http://192.168.2.144:8080/ <i> [webpack-dev-server] Content not from webpack is served from 'E:\hy\mall\mini-program\dist\h5' directory <i> [webpack-dev-server] 404s will fallback to '/index.html' <i> [webpack-dev-middleware] wait until bundle finished: /mobile/ (node:36520) [DEP_WEBPACK_TEMPLATE_PATH_PLUGIN_REPLACE_PATH_VARIABLES_HASH] DeprecationWarning: [hash] is now [fullhash] (also consider using [chunkhash] or [contenthash], see documentation for details) (Use `node --trace-deprecation ...` to show where the warning was created) ✖ Errors: Error: plugin x failed to invoke plugin on 'Some("E:\\hy\\mall\\mini-program\\src\\app.config.ts")' → Watching... [2025/7/2 10:18:42] ℹ Listening at http://192.168.2.144:8080/mobile/ asset js/app.9bafabbd02fcdf695601.js 977 KiB [emitted] [immutable] (name: app) asset js/taro.9bafabbd02fcdf695601.js 179 KiB [emitted] [immutable] (name: taro) (id hint: taro) asset js/runtime.9bafabbd02fcdf695601.js 45.3 KiB [emitted] [immutable] (name: runtime) asset index.html 8.28 KiB [emitted] Entrypoint app 1.17 MiB = js/runtime.9bafabbd02fcdf695601.js 45.3 KiB js/taro.9bafabbd02fcdf695601.js 179 KiB js/app.9bafabbd02fcdf695601.js 977 KiB runtime modules 29.9 KiB 14 modules modules by path ./node_modules/core-js-pure/ 132 KiB 127 modules modules by path ./node_modules/@pmmmwh/react-refresh-webpack-plugin/ 43.9 KiB 22 modules modules by path ./node_modules/@tarojs/webpack5-runner/node_modules/webpack-dev-server/client/ 61.6 KiB 12 modules modules by path ./node_modules/html-entities/dist/ 67.8 KiB modules by path ./node_modules/html-entities/dist/esm/*.js 33.5 KiB 4 modules modules by path ./node_modules/html-entities/dist/commonjs/*.js 34.2 KiB 4 modules modules by path ./node_modules/webpack/hot/*.js 5.81 KiB ./node_modules/webpack/hot/only-dev-server.js 2.58 KiB [built] [code generated] ./node_modules/webpack/hot/log.js 1.73 KiB [built] [code generated] + 2 modules modules by path ./node_modules/react-refresh/ 21.8 KiB ./node_modules/react-refresh/runtime.js 222 bytes [built] [code generated] ./node_modules/react-refresh/cjs/react-refresh-runtime.development.js 21.6 KiB [built] [code generated] + 7 modules ERROR in ./src/app.config.ts plugin x failed to invoke plugin on 'Some("E:\\hy\\mall\\mini-program\\src\\app.config.ts")' ERROR in ./src/app.config.ts Cannot read properties of undefined (reading 'length') TypeError: Cannot read properties of undefined (reading 'length') at WasmHash._updateWithBuffer (E:\hy\mall\mini-program\node_modules\webpack\lib\util\hash\wasm-hash.js:108:23) at WasmHash.update (E:\hy\mall\mini-program\node_modules\webpack\lib\util\hash\wasm-hash.js:51:8) at BatchedHash.update (E:\hy\mall\mini-program\node_modules\webpack\lib\util\hash\BatchedHash.js:53:14) at NormalModule.updateHash (E:\hy\mall\mini-program\node_modules\webpack\lib\NormalModule.js:1655:8) at Compilation._createModuleHash (E:\hy\mall\mini-program\node_modules\webpack\lib\Compilation.js:4302:11) at Compilation.createModuleHashes (E:\hy\mall\mini-program\node_modules\webpack\lib\Compilation.js:4247:25) at E:\hy\mall\mini-program\node_modules\webpack\lib\Compilation.js:3313:11 at Hook.eval [as callAsync] (eval at create (E:\hy\mall\mini-program\node_modules\webpack\node_modules\tapable\lib\HookCodeFactory.js:33:10), <anonymous>:10:1) at Hook.CALL_ASYNC_DELEGATE [as _callAsync] (E:\hy\mall\mini-program\node_modules\webpack\node_modules\tapable\lib\Hook.js:20:14) at E:\hy\mall\mini-program\node_modules\webpack\lib\Compilation.js:3253:36 at eval (eval at create (E:\hy\mall\mini-program\node_modules\webpack\node_modules\tapable\lib\HookCodeFactory.js:33:10), <anonymous>:18:1) at E:\hy\mall\mini-program\node_modules\@tarojs\webpack5-runner\node_modules\html-webpack-plugin\lib\cached-child-compiler.js:237:53 at processTicksAndRejections (node:internal/process/task_queues:95:5) webpack 5.99.9 compiled with 2 errors in 7871 ms
最新发布
07-03
<think>我们正在处理一个Webpack编译错误,具体错误信息是: 1. "failed toinvoke plugin"(调用插件失败) 2. "Cannot readproperties ofundefined (reading 'length')"(无法读取未定义的属性'length')根据引用[4]和[5],这类错误通常与版本不兼容或配置错误有关。特别是引用[4]提到“Cannot readproperties ofundefined (reading ‘tap‘)”错误是由于版本不兼容或配置错误引起的。而引用[5]则提到通过降级loader版本解决了类似问题。因此,我们的解决思路应该集中在: 1.检查插件和loader的版本兼容性,尤其是与Webpack5.99.9的兼容性。2.检查配置文件中是否存在错误的配置项。 步骤:###1.确认Webpack版本首先,确认你使用的Webpack版本确实是5.99.9。运行以下命令:```bashnpmlist webpack#或者yarnlist webpack``` ###2.检查插件和loader的版本兼容性根据错误信息“failed toinvoke plugin”,可能是某个插件在调用时出错。而“Cannotread propertiesof undefined(reading'length')”则表明在某个地方尝试读取`undefined`的`length`属性。这通常发生在插件或loader内部。查阅你项目中使用的插件和loader的文档,确认它们是否支持Webpack5。Webpack5与Webpack4在插件和loader的API上有一些不兼容的变化。###3.更新或降级插件/loader如果发现某个插件或loader不支持Webpack5,尝试以下方法: -更新该插件/loader到支持Webpack5的版本。-如果更新后问题仍然存在,或者没有支持Webpack5的版本,考虑降级Webpack到4.x版本(但注意,你的项目使用的是5.99.9,降级可能不是首选)。 -如果更新插件/loader不可行,可以尝试降级该插件/loader到已知稳定的版本(如引用[5]中通过降级style-loader解决了问题)。###4.检查配置检查webpack.config.js(或其它配置文件)中是否正确配置了插件和loader。特别注意:-插件是否被正确实例化(例如:`newPluginName()`)。- loader的配置顺序(从右到左,从下到上执行)是否正确。-是否有配置项被错误地设置为`undefined`。 ###5.调试如果以上步骤无法解决问题,可以尝试以下调试方法:-逐个注释插件和loader,确定是哪个插件或loader导致的问题。-查看该插件/loader的GitHub issues,看是否有类似问题及解决方案。 ###6.查看完整错误堆栈错误信息可能只给出了部分信息,查看完整的错误堆栈可以帮助定位问题。运行Webpack时使用`--verbose`参数获取详细日志:```bashwebpack --verbose```###示例解决方案(参考引用[5]) 引用[5]中提到,通过将loader从v17降级到v15解决了问题。因此,如果你发现某个loader可能是问题所在,可以尝试降级。例如,如果问题出在`css-loader`上,你可以降级它: ```bashnpm installcss-loader@15--save-dev#或yarnadd css-loader@15 --dev``` ###总结由于错误信息指向插件调用失败和读取未定义属性的长度,最可能的原因是某个插件或loader与Webpack5不兼容。按照上述步骤,首先定位问题插件/loader,然后更新或降级它。 §§相关问题§§1.如何检查Webpack插件和loader的版本兼容性? 2. Webpack5有哪些常见的破坏性变更? 3.如何调试Webpack配置错误?</think>### Webpack编译错误解决方案 针对您遇到的Webpack 5.99.9编译错误: 1. `failed to invoke plugin`(调用插件失败) 2. `Cannot read properties of undefined (reading 'length')` 以下是系统性的解决步骤: --- ### 一、核心原因分析 根据错误信息和引用[4][5],这类问题通常由以下原因引起: 1. **版本不兼容**(最常见):插件/loader与Webpack 5不兼容(特别是使用Webpack 4的插件) 2. **配置错误**:插件配置项缺失或格式错误 3. **依赖冲突**:npm/yarn依赖树中存在版本冲突 4. **生命周期钩子问题**:插件在`tap`钩子中访问未定义变量(引用[4]) --- ### 二、解决步骤 #### 第一步:锁定问题插件 1. 在终端运行带堆栈跟踪的命令: ```bash webpack --stats verbose ``` 2. 在错误堆栈中查找第一个出现`at Object.<anonymous>`的位置,确定具体插件名称 #### 第二步:版本兼容性处理(关键步骤) 1. **检查插件兼容性**: ```bash npm view [插件名] versions # 查看插件所有版本 ``` 2. **升级/降级策略**: - 若是**Webpack 5插件** → 升级到最新稳定版 - 若是**Webpack 4插件** → 降级到兼容版本(如引用[5]中通过降级解决) ```bash # 示例:降级css-loader npm install [email protected] --save-dev ``` #### 第三步:配置检查 1. 在`webpack.config.js`中检查问题插件的配置: ```javascript // 错误示例(缺少必要配置项) plugins: [ new SomePlugin() // 缺少配置对象 ] // 正确示例 plugins: [ new SomePlugin({ key: 'value' // 确保必要参数存在 }) ] ``` #### 第四步:清除缓存和重装 ```bash # 1. 清除构建缓存 rm -rf node_modules/.cache # 2. 清除lock文件并重装 rm package-lock.json npm cache clean --force npm install ``` #### 第五步:依赖树检查 ```bash npm ls [插件名] # 检查嵌套依赖版本 ``` 若发现多个版本冲突,使用`npm dedupe`或手动指定版本 --- ### 三、特定情况处理 若错误涉及`tap`钩子(引用[4]): 1. 检查插件是否使用旧版`tapable` API 2. 在插件初始化时添加空对象保护: ```javascript new SomePlugin({ hooks: {} // 防止undefined访问 }) ``` --- ### 四、验证方案 1. 创建最小化测试配置: ```javascript // test.config.js module.exports = { entry: './dummy.js', plugins: [new ProblemPlugin()] // 单独测试问题插件 } ``` 2. 逐步添加其他配置,定位冲突点 > **经验提示**:Webpack 5对插件API要求更严格,需确保所有插件都使用`compiler.hooks.xxx.tap()`的标准写法(引用[4]) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值