reactjs - 修复 NPM 重复问题,两个包依赖相同的 peerDependency 但在不同的版本级别与 CRA React
问题描述
我相信我有重复的问题,但我正在努力解决它。在我的反应项目中,我有两个包(A 和 B),它们都在其 peerDependencies 中使用另一个包(C)。
当我构建只安装了 A 和 C 的项目时,一切都很好。然后当我 npm install package B 并执行 npm run build 时,突然间我有至少包 A 的重复块,并且我的构建大小从 10MB 变为 40MB。哎呀。
我跑了npm dedupe
,什么都没有。
我复制了我的项目,npm eject
并将其添加resolve.alias
到 webpack 配置中。再次,什么都没有。
我的 package.json 有什么可以改变的,以便其他两个包都满意吗?
共享包是^4.11.0
在其他包的对等依赖项中
包 A 是^4.0.1
包 B 是^4.9.10
根据我对 npm 版本控制的了解......这应该没问题吧?
独立地,这两个包都可以正常工作,但是一旦您尝试将它们一起使用,这就是重复发生的地方。我什至不能确定这是一个重复问题,但是我运行了 source-map-explorer 并且它显示了重复问题,所以我只能假设这是问题所在,但感觉就像我所有修复重复问题的尝试都没有什么都不做。
这就是很多开发者谈论的依赖地狱吗?
解决方案
所以,我找到了导致重复的原因,但我担心它带来的问题多于答案。
我的项目使用可加载组件。我一直在对路由级别的所有内容进行代码拆分,因此我的所有组件都是逐页加载的。
导致重复错误的两个文件不包括从有问题的包之一的导入。我项目中的每个其他页面都会在其中导入该包。当我在不使用可加载的情况下导入这两个页面时,重复就消失了。
我无法真正解释为什么会发生这种情况,但我想当它没有导入文件时,不知何故可加载会创建我的一个包的两个不同版本?所以一个块有一个版本的包,而我的主块有一个不同的包?
推荐阅读
- google-chrome - Chrome 扩展 (Windows 10) - 如何查找崩溃日志/报告?
- python - 如何使用 Selenium 和 Python 在不同的 div 中单击第二个 href 文本
- django - 将非 CMS (Django) 页面添加到 Wagtail 菜单
- php - “致命错误:在 ajax 中尝试更新数据库时调用 boolean() 上的成员函数 execute()”
- javascript - 如何在 Nest.js 中使用查询参数?
- java - 在 JAVA 类中建模事件和预订 - 最佳设计方法
- android - 将 google oauth 添加到 laravel 网络服务
- python - Python 一行循环输入
- php - Windows 10 XAMPP - PDO 连接正常,无法通过 mysqli 或 mysqli_connect 连接
- c - C结构和联合在一起