随着 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
| |--node_modules
| |--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)
评论
hello 我用的react-native-picker,为什么安卓上不会显示啊
你运行下example里面的代码,看看会不会显示