cnpm install文件夹不存在_npm,cnpm,yarn安装依赖的差别

选用两个包,jquery-dreamstream(以下简称jq-d)和jquery.tree(以下简称jq-t),他们的dependency都只有jquery(以下简称jq)一个包

测试的时候,jq-d的dependency为jq@^2.1.1,jq-t的dependency为jq@~2.1.1。其中jq@^2.1.1的最高兼容版本为2.2.4,jq@~2.1.1的最高兼容版本为2.1.4,两者交集最高兼容版本为2.1.4

1.npm

  • 表现:

(1).生成了package-lock.json,结构为:

dependencies: {
    jq: 2.2.4,
    jq-d: xxx(xxx为jq-d自身版本,这里不需要关心这个问题,所以后文省略,jq-t同),
    jq-t: {
        dependencies: {
            jq: 2.1.4
        }
    }
}

(2).下载了三个目录,jq,jq-d,jq-t

其中jq的版本为2.2.4,jq-d内无node_modules目录,但jq-t内有node_modules目录,里面有一个2.1.4的jq

  • 整体结构:

├ jq@2.2.4

├ jq-d

├ jq-t

├ jq@2.1.4

  • 推测:解析依赖后发现jq-d最高兼容jq版本2.2.4高于jq-t的2.1.4,所以把2.2.4放到了外面的第一层来,然后把2.1.4放到了jq-t自己目录的node_modules里。

2.cnpm

  • 表现:

node_modules目录里出现了7个目录,4个真实目录,3个软链接

4个真实目录:_jq-d,_jq-t,_jq@2.1.4,_jq@2.2.4

3个软链接:jq -> _jq@2.2.4,jq-d -> _jq-d,jq-t -> _jq-t

  • 整体结构

├ _jq-d

├ _jq-t

├ _jq@2.1.4

├ _jq@2.2.4

├ jq

├ jq-d

├ jq-t

可以看出相比npm,cnpm的node_modules只有一层,把各个非直接install的第三方包都放到了最顶层的node_modules里

  • 推测:

将依赖树从第二层开始的子节点全部移到第一层,把树形结构变成平的一层

3.yarn

  • 表现

(1).生成了yarn.lock文件,锁了4个包:jq-d,jq-t,jq@2.2.4,jq@2.1.4(和npm的package-lock.json比较类似,只是把前者的树形结构展开成一层了)

(2).目录同npm

  • 整体结构同npm
  • 推测:只是单纯的把npm的依赖树展开,锁各个包版本

疑问:为什么在解析jq-d和jq-t的依赖的时候,不取两个交集的最高兼容版本2.1.4,要分别下载各自的最高兼容版本,也就是下了两个版本的jq?如果只下一个2.1.4,然后同时给两个包用,会出现什么问题?

来自so的回答:

90c39fa0d11c00aae98005ee734eb100.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值