npm、cnpm、yarn、pnpm区别

157 阅读2分钟

npm和yarn区别

当npm还处于3.x版本时,yarn出现了,yarn的特性:

  • 确定性:通过yarn.lock机制解决,npm 5.x版本才出现package-lock.json机制
  • 采用模块扁平化的安装模式:npm 3.x版本之后采用相同模式
  • 采用缓存机制,实现离线模式:npm5.x版本已实现

npm通过借鉴yarn的优点,现在两者区别已经不大了,yarn安装速度比npm快,yarn是并行安装,npm是串行安装

npm和cnpm区别

  • cnpm镜像地址是淘宝镜像
  • cnpm安装不会生成package-lock.json,也不会读取package-lock.json

pnpm

  • 速度快:安装依赖包时,pnpm将所有依赖包存储在磁盘的某一个位置,之后重复安装时,将会通过硬链接的方式共享同一份代码,不需要复制文件,所以速度非常快
  • 高效利用磁盘空间:npm/yarn在不同项目依赖同一个包的情况下,会在每个项目进行安装,而pnpm安装的包会存储在可寻址的磁盘中,在多个项目同时引用时,只需要用一个硬链接指向该地址就可以使用,大大节约了磁盘空间;当依赖了同一个包的不同版本时,只对变更的文件进行更新,不需要重复下载没有变更的部分
  • 支持monorepo:用一个git仓库来管理多个子项目,所有的子项目都存放在根目录的packages目录下,那么一个子项目就代表一个package
  • 安全性高:使用 npm/yarn 的时候,由于 node_module 的扁平结构,如果 A 依赖 B, B 依赖 C,那么 A 当中是可以直接使用 C 的,但问题是 A 当中并没有声明 C 这个依赖。因此会出现这种非法访问的情况。pnpm中依赖都是从全局硬链接到node_modules/.pnpm下,然后之间通过软链接来相互依赖,只要包未在package.json中声明,在项目中就无法访问