npm 删除依赖包_项目依赖同一npm包的多版本,会有冲突吗

上周吃饭时,大家聊到一个问题。比如我的项目trade,依赖了A@1.0.0版本。 然后我又引入了B,而B依赖A@2.0.0版本,这时候会产生冲突吗?

都知道不会有冲突,因为这种场景太常见了。不过具体是如何做到的,并没有去了解过。

今天正好有空,就写了个demo看看

首先建立好项目trade,然后安装 A@1.0.0,执行npm ls -depth=1

trade
└─ A@1.0.0

然后弄个npm包B,让它依赖A@2.0.0,项目trade安装B之后,执行npm ls -depth=1

trade
├─ A@1.0.0
└┬ B
  └─ A@2.0.0

到这里,node_modules中包的下载安装部分,就很清楚的知道了多版本存放的策略。


然后就是项目构建时,webpack生成bundle,打包的策略了。

webpack基本流程就是找到代码中各种模块引入语句(require()、import、url()等),然后确定模块依赖关系,最后把模块打包到一起去。

这里,会想说,项目trade中,引入A模块的代码是

// trade项目

模块B中,引入A模块的代码,也是

// 模块B

那么,这两个A,webpack是怎么知道具体打包哪个版本,不会搞错呢。

通过看打包好的代码和文档,发现是这么做的

首先对于这种直接书写模块名的引用,webpack查找模块的方式和node一致,都是先找当前目录的node_modules中是否有这个模块,然后再找上一级目录的node_modules,一直找到根目录。这么做,就能保证webpack能顺利找到模块了。

然后是模块打包的过程,虽然在我们写代码时,import的模块都叫做A,但是webpack内部,是把模块的路径当做模块的id标识来区分的,所以就不会找错了

// webpack模块的管理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值