问题是这样的,我从mpvue1.x升级到mpvue2.x之后,经历了很多报错,但是都一一解决了,这次的错误在后台编译的时候没有任何错误,但是在前端console中出现下面的报错情况
见到这种错误,我想当然的认为我是找不到问题的,就直接用Google去搜索报错信息
TypeError: Cannot read property 'prototype' of undefined mpvue
复制代码
wxs真的很难用 作为页面的脚本语言,微信这边自己现成的JS不用,自己搞了一套嵌入式脚本语言,里面只能写ES3的语法不说(还不是完整版的ES3语法)没有 Array, Object 对象;或遇到引入 lodash 会报错 TypeError: Cannot read property ‘prototype’ of undefined
我搜到了这个文档其实,这个文档已经够说明问题了,但是我觉得我这个不应该是lodash 的问题,因为我在mpvue1.x的时候用的好好的,升级之后也不可能出现问题,这是我当时的想法,我直接排除这个错误,连去尝试都没有直接排除了
接下来我做的一些努力(无效努力)
- 找到一个已经升级mpvue2.x的项目,去寻找package.json 之间的区别
- 反复去比对两个项目之间的区别
- 把所有依赖包都调成一样的版本
- 怀疑是引入的某些外部组件的问题(开始乱猜了)
- 埋怨自己为什么升级的时候不另外新建一个分支(后悔升级了,开始感情化处理了)
- 反问自己,总想着从侧面去解决问题(使用Google搜索其他人遇到同样的问题),为什么不从正面去做尝试,难道是因为正面寻找问题太麻烦了吗?
正面解决问题确实稍微麻烦些(被webpack编译过了),但是这个问题已经耽搁了自己太长的时间,有这些时间,早就从正面突破了,
最终突破困境(正面突破):
- 找到距离报错信息最近的自己的文件(这里有一个前提就是第三方库都是反复测试过的,确定没有问题的,出错的地方也只有自己的代码)这里很显然是,(http://127.0.0.1:53887/appservice/pages/index/main.js:276:68)这一行
- 点击去看看报错位置是哪行代码(点进去看了一眼,就知道问题了,还是那个lodash)
- 找到对应的编译之前的文件,将出错的地方注释
- 再次编译运行,解决问题
总结:
- 如果有多个错误的话,找第一个报错(后面的报错都是因为第一个报错而报错的)
- 逐字逐句阅读报错信息(尝试去理解)
- Google错误的时候加上使用技术栈的名称(这里是mpvue)
- 找到其他人使用时有相同错误记录的时候,一定要注意(记录下可疑的报错位置,特别是自己也是用了相同的库)
- 从报错信息正面调试,找到位置
排错的步骤(抽象一下):
- 定位 (定位错误代码的位置,阅读报错信息,使用Google,正面检查)
- 替换(注释掉)
- 运行
这个错误耽搁了我将近8个小时的时间