前言:相信很多刚学习包管理工具的同学都说从认识npm开始的,但是其他的包管理工具你都用过哪些,都知道它们的优缺点吗?今天就和大家一起探讨一下!
主流的前端包管理工具有 npm
、yarn
、pnpm
、以及国内的镜像 cnpm
、tyarn
等,这是包管理器都是基于 nodejs
。
npm
起源:npm
是 2010 年发布的 nodejs
依赖管理工具,在此之前,前端的依赖管理都是手动下载和管理的。
优点:npm是一个成熟、稳定、并且有趣的包管理器。提供了一个非常有用的解决方案,支持大量的测试用例
缺点:
- 下载速度慢
- 安装速度慢
- 下载版本不一致
注:npm5改进 与yarn相差不大
cnpm
起源:国内使用npm下载太慢了,所以淘宝提供了镜像cnpm访问。
优点:跟npm使用区别不大,npm是国外站点资源,cnpm是国内站点资源,当然国内站点的要快一点。
缺点: npm有packge-lock.json是用来锁定安装的包的版本号,但是cnpm不受packge-lock.json的限制,cnpm只根据packge.json来下载安装包
yarn
起源:yarn
是 Facebook 于 2016 年 发布的替代 npm
的包管理工具,还可以作为项目管理工具,定位是快速、可靠、安全的依赖管理工具。
缺点:
- 存在幽灵依赖。
- 提升的依赖依然复制多份的问题。
优点:
- 运行速度获得了显著的提高,整个安装时间也变得更少
- 像npm同样,yarn使用本地缓存。与npm不一样的是,yarn无需互联网链接就能安装本地缓存的依赖项,它提供了离线模式。这个功能在2012年的npm项目中就被提出来过,但一直没有实现。
- 容许合并项目中使用到的全部的包的许可证
注:pnpm解决了yarn存在的问题。
pnpm
起源:是 2017 年发布的一款替代 npm
包管理工具,具有速度快、节省磁盘空间的特点。
缺点:对老旧存量项目迁移pnpm可能需要踩坑
优点:
- pnpm运行起来非常的快,超过了npm和yarn
- pnpm采用了一种巧妙的方法,利用硬链接和符号链接来避免复制所有本地缓存源文件,这是yarn的最大的性能弱点之一
- pnpm继承了yarn的所有优点,包括离线模式和确定性安装
- pnpm 内置了对单个源码仓库中包含多个软件包的支持
- pnpm 创建的 node_modules 并非扁平结构,因此代码不能对任意软件包进行访问