error : Hooks can only be called inside of the body of a function component. 依赖包和主包加载多个react 引发冲突问题
1. 结论: 在依赖包和主包的node-modules中,同时install包含react , react-dom 或者react-redux时,跑测试或者启动的时候,显示如下error。当然出现这个错误的原因还有以下可能:

2. 为什么会同时引入多个react,react-dom 引发冲突呢?
1. 删除了package-lock.json文件,导致下载包的顺序和npm仓库地址不确定。
2. 删除了主项目的nodel-modules,或者去拉一个新的项目时,没有存在历史了的react 版本,使这个问题暴露出来。
3. 依赖项目里没有使用 peerDependencies(peerDependencies会提升依赖包的依赖到主项目的依赖中,避免冲突和重复)。
4. 在下载包的时候,如果没有下载 react 先下载了依赖包,依赖包就会根据自己pack.json里的dependencies去下载react,这个react只给自己使用。
5. 由于主项目也需要react,所以就同时install两个react依赖, 依赖包优先使用自己node-modals里的依赖,主包使用自己node-modals里的依赖,运行时或者测试时,产生冲突。
3. 解决办法:
1. 添加 package-lock.json
2. 使用 peerDependencies在子项目中, 将主项目会复用到的react react-dom等,都放到peerDependencies中,避免冲突。
3.如果只是在本地跑的话,可以使用 'npm link main/nodal-modals url' 关联到主分支,进行调试,再使用 ‘npm unlink main/nodal-modals url’ 解除关联。
4. 拓展其它
1. npm3开始,采用扁平化依赖的方式,来解决依赖包嵌套太深或者不同包引入react冲突的问题,将所有的依赖都放到node-modules里,但是会存在依赖包结果不稳定,存在非法访问等问题。
2. 使用 pnpm 依赖管理(将包本身和依赖放在同一个node-modules里,依赖地址采用相对地址的方式),解决依赖提升问题,优化性能。
3. 使用 dependency-check 解决npm/yarn依赖提升问题。
error : Hooks can only be called inside of the body of a function component. 依赖包和主包加载多个react 引发冲突问题的更多相关文章
- echarts异步加载柱状图遇到的错误- Error: Component series. not exists. Load it first.
今天看了下echarts教程之中的异步加载柱状图,我按照教程中的代码敲出来之后再运行,就报了一个 Error: Component series. not exists. Load it first. ...
- Centos系统创建用户oracle后,用该用户登陆系统,页面加载报错GConf error
Linux 的 GConf error 解决办法 问题: Centos系统创建用户oracle后,用该用户登陆系统,页面加载报错,导致重新进入Centos系统后出现: GConf error:Fail ...
- Error #2044: 未处理的 IOErrorEvent:。 text=Error #2035: 找不到 URL这是flash加载外部资源时有时会遇到的问题,对于此问题解决如下
导致这个错误的主要原因是未添加IOErrorEvent事件监听,或者添加了监听,但是加载时使用了unload() 参考资料: http://blog.csdn.net/chjh0540237/arti ...
- Inside Flask - flask 扩展加载过程
Inside Flask - flask 扩展加载过程 flask 扩展(插件)通常是以 flask_<扩展名字> 为扩展的 python 包名,而使用时,可用 import flask. ...
- (转载)Flash Loader加载完成不发送COMPLETE和ERROR事件的问题分析
(转载)http://blog.dou.li/flash-loader%E5%8A%A0%E8%BD%BD%E5%AE%8C%E6%88%90%E4%B8%8D%E5%8F%91%E9%80%81co ...
- pygame加载中文名mp3文件出现error
好一阵子没有写东西了,最近几天在做一个基于Python pygame的音乐播放器,本来想做完了,再来发篇文章的,可越做越深,框架大致出来了,考虑周期比较长,也可能是我个人问题,做得比较慢,最近.下面来 ...
- Atlassian JavaScript load error(配置Atlassian的时候报无法加载script文件)
等我弄好的时候,发现报错的图已经成为历史了,所以就没有截图了. Atlassian JavaScript load error We tried to load scripts but somethi ...
- MSBUILD : error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”
问题 MSBUILD : error MSB3428: 未能加载 Visual C++ 组件"VCBuild.exe".要解决此问题,1) 安装 .NET Framework 2. ...
- Error 25007.初始化合成时发生错误。安装程序无法使用 LoadLibraryShim() 加载合成。
安装“Microsoft .NET Framework 2.exe”报错如下: c:\windows\microsoft.net\framework\...类似这种错误都因 .NET Framewor ...
随机推荐
- 2020年度钻石C++C学习笔记(3)--《博学谷》
1.Unix/Linux操作系统介绍 1.1 操作系统的作用 1.1.1 操作系统的目标 l 方便:使计算机系统易于使用 l 有效:以更有效的方式使用计算机系统资源 l 扩展:方便用户有效开发.测试和 ...
- JavaScript学习05(操作DOM)
操作DOM DOM(文档对象模型) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model). HTML DOM 模型被结构化为对象树: 通过这个对象模型,Java ...
- 课程设计-基于SSM的美容美发造型预约管理系统代码Java理发剪发设计造型系统vue美发店管理系统
注意:该项目只展示部分功能,如需了解,评论区咨询即可. 1.开发环境 开发语言:Java 后台框架:SSM 前端框架:vue 数据库:MySQL 设计模式:MVC 架构:B/S 源码类型: Web 编 ...
- Golang语言系列-14-单元测试
单元测试 字符串切割函数 package split_string import ( "fmt" "strings" ) // Split:切割字符串 // e ...
- 前端从😳 到🚪 gRPC 框架
RPC 是什么? RPC 英文全称是 Remote Procedure Call 既远程过程调用,维基百科中给的定义是一个计算机调用了一个函数,但这个函数并不在这台计算机上,这种远程调用方式程序员无需 ...
- SQL 练习21
查询每门课程被选修的学生数 SELECT cid,COUNT(cid) 选修人数 from sc GROUP BY cid
- NOIP 模拟 $16\; \rm Lost My Music$
题解 \(by\;zj\varphi\) 一道凸包的题 设 \(\rm dep_u\) 表示节点 \(u\) 的深度,那么原式就可化为 \(-\frac{c_v-c_u}{dep_v-dep_u}\) ...
- 记录一次java项目上线部署
环境 操作系统:CentOS Linux release 8.0.1905 数据库:mariadb10.3.17 安装数据库 yum install -y mariadb mariadb-server ...
- C#---OleDbHelper
/// <summary> /// OleDbServer数据访问帮助类 /// </summary> public sealed class OleDbHelper { pu ...
- 【权限管理】Spring Security 执行流程
转自:https://blog.csdn.net/weixin_37689658/article/details/92752890 1.基本配置使用 (1)创建配置类 创建一个配置类SecurityC ...