npm7 install package can‘t relosve peerDependency的包的解决办法

项目场景:

npm7 install package 依赖包与宿主环境冲突,无法can't relosve dependency,npm7会报错,并提供解决方法,但是该解决方法并不能保证正确的依赖关系。

问题描述:

使用版本7的npm下载一个packageA,发现packageA依赖的某个包和宿主环境的包版本有冲突,此时控制终端输入如下提示:

在这里插入图片描述
官方提醒我们使用 --force 进行强制下载, --legacy-peer-deps 来忽略下载。如此,npm install 至少保证能下载成功,只是依赖指向是错的。如下图:

在这里插入图片描述
上图deduped表示,该依赖版本与宿主环境相同,移除并指向宿主环境。但是这不符合packageA的package.json的要求啊!


原因分析:

这种情况其实经常会出现。

使用最新的脚手架,导致其他UI组件和npm软件跟不上最新的版本,总有旧的版本产生冲突;
反之亦然

原因很简单,就是依赖包和宿主环境冲突了(好废话。。)。

那解决问题的思路就是单独安装单个包的依赖


解决方案:

如果宿主环境的和其他软件依赖包不同,那就单独下载到自己的包下面呗。反正在当前目录下载时,遵循当前目录的package.json的使用。

我猜测因为没有更高层级的tree存在,因此该方法才能通过。

1、先执行 **npm install packageA --legacy-peer-deps**,忽略有冲突的依赖包的下载,保证packageA被正常下载 2、然后 cd node_modules/packageA/, 来到packageA的安装目录,执行npm install,该操作会按照当前package.json的配置来,没有宿主环境的干扰

在这里插入图片描述
再次查看依赖关系,显示正常。

在这里插入图片描述
要查找当前包依赖的其他包的位置,使用:

npm explore packageB(依赖的包名)

会自动进入该位置目录,输入exit 回车可退出。

更新:

如果上述方法还没有解决你的依赖问题,或者你再运行npm start的时候报错了,请往下看。

npm install packageA 结束后,是否提醒你 添加了 几个包,删除了几个包?(对的,它可能删除了其他的依赖包(peerDependency)!会导致别的包无法使用,影响你程序的继续运行)

下面是我的记录,ng2-smart-table删除了看似跟他不相关的别的包的依赖包。
在这里插入图片描述
这导致它自己看起来正常了,但是别的包在npm start的时候引用不停地报错了。

然后我将depth打到最深,npm ls --all 列出了所有的依赖包,还是没看懂他的remove逻辑在哪儿(他删除了不属于自己任何dependency的包)。

最后我将无故被自动删除的这些包,放到了root package.json下面,这样下载的时候会自动下载到最顶层,

至少我觉得npm install,不会导致顶层包被删除,却可以删除peerDependency的包。因为允许–legacy-peer-deps选项,这意味着你可以不严格按照peerDenpency的要求,npm允许你这样下载,即允许你这样做。

同时将packageA也添加到root package.json。最终下载成功。

更新部分是实践的结果,因为尚未找到npm install时引起一些表现的原因,所以之后这个会持续更新,直到找到root casue。

希望能帮到有用的人吧。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值