苦逼前端

npm的几个坑

Javascript2016-03-09 01:53

随着nodejs发布5.x.x稳定版,npm3也踏坑而来,带来了传说中的flat dependencies。如果没有版本冲突的话,它会把所有的依赖压成一层。

没冲突的情况下,比如模块依赖关系是这样的:
---a@1.0.0---b@1.0.0
      |-b@1.0.0

安装后的项目结构是这样的:
node_modules---a@1.0.0
             |-b@1.0.0

有冲突的情况下,比如:
---a@1.0.0---b@2.2.2  |-b@1.0.0

安装后的项目结构是这样的:
node_modules---a@1.0.0---b@2.2.2
             |-b@1.0.0

仔细想想,以后大家的node_modules目录可能就没那么干净了,什么乱七八糟的深层依赖都会跑到上面来,不过这样经过排重后需要下载的代码量也会大大缩减吧,并且npm官网上统计的各个流行模块的惊人下载量也会急剧下降吧。

上面提到的模块版本冲突的问题,有些组件的依赖并不是直接写死了版本号,而是类似于^0.0.1,~0.0.1这种情况,如果是这种模糊版本号,并且两个组件的版本号在同一范围内,也会被认为是同一个依赖而被压平的。

~比较好理解,就是最后一位版本号模糊:
~1.2.3 :  >=1.2.3 <1.3.0
~1.2   :  >=1.2.0 <2.0.0

^比较蛋疼,看下面三个例子或许你就理解了:
^1.2.3 :  >=1.2.3 <2.0.0
^0.2.3 :  >=0.2.3 <0.3.0
^0.0.3 :  >=0.0.3 <0.0.4

总之,就是小于非0最高位的那位数+1(还是英文好解释"Compatible with version")
更多规则请移步这里

评论(3)
  • 朱大哈: 评论4年2个月前
  • 219.155.128.*: hello 我用的react-native-picker,为什么安卓上不会显示啊4年2个月前
  • 邢文亮: 你运行下example里面的代码,看看会不会显示4年2个月前
还可输入200个字