一、出现的场景:
1.Taro的编译正常,也能监听代码修改,并且没有报错;
2.用小程序ide引入并打开dist文件夹,报了如下截图中的错误
二、报错截图:
Error: Minified React error #321
三、问题分析
这种情况出现的原因可能有很多,每个人遇到的情况可能不一样,主要是要从报错推测问题来正面解决一下。
从截图中的报错来看,是React相关的报错,然后看其中的堆栈报错信息,说是react.production.min.js中的useMemo导出相关有问题,可以看到底部的报错信息是从@taro-之类的某个库报出来的。
那么做个推论,react导出某个函数(截图中指出是useMemo),taro并不识别,可能是taro在使用react框架的过程中没有识别到。但是react框架肯定没问题,taro框架往往也不会有问题,那么不识别的问题,就很有可能是taro版本和react的版本,没有做好版本依赖关系导致的。
所以思路往react和taro的版本依赖上去考虑。
四、尝试和解决
1.首先检查react和react-dom的版本是否匹配,如果不匹配,那么修改成一致,重新npm install;
2.检查Taro版本,查看package.json中的@tarojs/taro和@tarojs/cli版本是否一致,
并且检查当前终端中使用的Taro版本:
taro --version
需要保持这3个的版本一致,如果不一致,那么使用以下的2个命令,让项目和终端使用的taro版本保持一致。
taro update self [version] // 更新 Taro 开发工具 taro-cli 到指定版本或 Taro3 的最新版本
taro update project [version] // 更新项目所有 Taro 相关依赖到指定版本或 Taro3 的最新版本
并且需要重新npm install。
3.如果仍然不行,那么检查package-lock.json中的taro相关库的版本,是否和package.json中的版本保持一致。
一个重要需要注意的点就是,taro相关库版本号前面的版本控制符号:
"@tarojs/taro": "3.5.12",
"@tarojs/cli": "^3.5.12", // 需要去掉前面的^号,保持和tarojs/taro一致
比如这个cli库前有^这样的大版本控制符号,在npm install的时候,如果3.x系列库有高于3.5的库(比如:3.6.14),那么安装的也就是3.6.14,而不是看到的3.5.12,这样实际上导致taro和cli的版本不一致。
改成一致后,都需要npm install一下。
五、小结
我截图中出现的问题,正是由于方案3中的版本号问题造成的,导致实际install的tarojs/cli是3.6.14(在package-lock.json中可以看到),而和tarojs/taro中3.5.12版本不匹配。