npm vs yarn & npm发展史
工具:
depcheck:检查unused package
综述:
npm前期版本问题很多,但没有替代工具
yarn的出现解决了很多问题,变的火热
npm5基本追平yarn
使用建议:npm* -> yarn -> npm5
一、npm早期版本:
由于每个包的依赖都重新安装、放在对应的node_modules下,导致:
目录嵌套层级过深 (触发 windows 文件系统中,文件路径不能超过 260 个字符长的错误)
模块实例无法共享
安装速度过慢: 同步请求
二、npm软链版本:
扁平化安装到同一层,通过软链接方式,从各个包的node_modules指向到根node_modules
好处:
目录简介:解决了1、2问题
安装速度提升:多线程请求
缺点:
npminstall和pnpm包实现,不能保证与npm行为完全一致,有bug要反馈给作者,修复时间难以预计
无法与npm一起用:混用效果奇葩
三、npm3
无冲突的情况下尽量安装到较高的层级,各依赖通过模块引入;但是引入的包版本不同时,将不能放到同一目录
好处:目录层级真正扁平化
缺点:
依赖同一个包的不同版本时,还是要嵌套
安装速度依然不够快
四、yarn
好处:(对比npm)
锁定版本,解决了两次安装版本无法保证一致的问题 (yarn.lock)
解决了安装速度慢的问题 (并行)
离线模式(缓存)
其他好处:
默认安装到dependencies,不需要npm install -s
命令简介、语义化、提示的交互性高 install->add;uninstall->remove;update交互模式选择更新的包
全局模块的管理
npm各个项目下的包安装到一处/usr/lib/node_modules,通过软链接到/usr/local/bin
yarn:所有包安装到一处,很方便的直接备份yarn.lock 到另一处安装还原
缺点
非官方,兼容性较差、更新较慢
五、npm5(2017)
默认package-lock.json 锁定版本
默认安装到dependencies
安装速度提升,较yarn慢一点,可以接收
npm-check替代yarn update
package-lock.json的功能,早在npm5发布之前就存在,npm shrinkwrap,但需要手动生成,所以受众不多
tip:5.0版本存在一个坑:如果已经有package-lock,在package中新增依赖,该包并不会被安装到node_modules,package-lock也不会更新