npm、yarn、cnpm全面解析
前言:不讲原理和使用,本文只告诉你这三个的对比。
npm
npm(node package manager):nodejs的包管理器,用于node插件管理(包括安装、卸载、管理依赖等)
npm使用一个名为package.json
的文件,用户可以通过npm install --save
命令把项目里所有的依赖项保存在这个文件里。
优点:(1)npm 为你和你的团队打开了连接整个 JavaScript 天才世界的一扇大门。
(2)它是世界上最大的软件注册表,每星期大约有 30 亿次的下载量,包含超过 600000 个 包(package) (即,代码模块)。
(3)来自各大洲的开源软件开发者使用 npm 互相分享和借鉴。包的结构使您能够轻松跟踪依赖项和版本。
缺点:(1)语义版本控制而导致的npm安装的不确定性问题
(2)npm必须首先遍历所有的项目依赖关系,这是一个耗时的操作,是npm安装速度慢的一个很重要的原因。
(3)程序包没有签名,并且npm除了做了基本的SHA1哈希之外不执行任何完整性检查,这给安装系统程序带来了安全风险。
yarn
快速、可靠、安全的依赖管理工具。
优点:(1)Yarn 缓存了每个下载过的包,所以再次使用时无需重复下载。 同时利用并行下载以最大化资源利用率,因此安装速度更快。
(2)在执行代码之前,Yarn 会通过算法校验每个安装包的完整。
(3)使用详细、简洁的锁文件格式和明确的安装算法,Yarn 能够保证在不同系统上无差异的工作。
(4) yarn使用本地缓存。与npm不同的是,yarn无需互联网连接就能安装本地缓存的依赖项,它提供了离线模式。
缺点:(1)每个包都是复制到当前项目,毫无疑问,内存很快被占满。
pnpm
可阅读pnpm的作者Zoltan Kochan发表的“为什么要用pnpm?”
优点:(1)pnpm运行起来非常的快,超过了npm和yarn
(2)pnpm采用了一种巧妙的方法,利用硬链接和符号链接来避免复制所有本地缓存源文件,这是yarn的最大的性能弱点之一
(3)使用链接并不容易,会带来一堆问题需要考虑。
(4)pnpm继承了yarn的所有优点,包括离线模式和确定性安装
总结
- npm仍然提供了一个非常有用的解决方案,支持大量的测试用例。大多数开发人员使用原始npm客户端仍然可以做得很好
- yarn的确定性安装,可以避免很多潜在的问题,相对安全
- pnpm可能是一些测试用例的更好的选择。例如,它可以在运行大量集成测试并希望尽可能快地安装依赖关系的中小型团队中发挥作用
最后亲自测试过同一个项目不同方式安装依赖的时间:
npm:02:33:54 yarn 01:04:16 pnpm:00:44:08 当然还要考虑网速和本地缓存的依赖这两个因素。