npm、cnpm、pnpm、yarn、tyarn

5,280 阅读2分钟

npm

npm(node package manage)是 nodejs 自带的包管理工具。package.json

  • ~会匹配最近的小版本依赖包,比如~1.2.3会匹配所有1.2.x版本,但是不包括1.3.0
  • ^会匹配最新的大版本依赖包,比如^1.2.3会匹配所有1.x.x的包,包括1.3.0,但是不包括2.0.0
  • *这意味着安装最新版本的依赖包

cnpm

npm 的默认官方下载源是 https://registry.npmjs.org/,国内访问经常掉线。因此淘宝推出了淘宝源https://registry.npm.taobao.org

//可以在安装包的时候指定下载源 
npm i --registry=https://registry.npm.taobao.org

//改变全局默认下载地址
npm config set registry https://registry.npm.taobao.org

npm install cnpm -g --registry=https://registry.npm.taobao.org

cnpm 的坑:package-lock.json是用来锁定安装时的包的版本号,如果之前用 npm 安装产生了package-lock.json,后面再用cnpm来安装package.json、package-lock.json安装可能会跟你安装的依赖包不一致,这是因为 cnpm 不受package-lock.json影响,只会根据package.json进行下载

pnpm

听说 pnpm 的速度更快,因为它采用了一种巧妙的方法,利用硬链接和符号链接来避免复制所有本地缓存源文件,这是 yarn 的最大的性能弱点之一。使用链接并不容易,会带来一堆问题需要考虑。

yarn

npm的缺陷比如:

  • 1、下载速度慢
  • 2、安装速度慢
  • 3、没有统一的版本控制,各成员之间的包版本经常不一致

为此 Google 和 Facebook 等国际大公司开发了 yarn 这个新的包管理工具。源还是旧的源https://registry.npmjs.org/,下载和管理包的方式 发生了重大的变化:

  • 1、通过并行下载提高了包的下载速度
  • 2、引入了 yarn.lock 文件,存储包之间的依赖关系,保证成员之间的包版本一致
  • 3、有了 yarn.lock 文件,不用每次计算各个包之间的版本依赖,安装速度更快等等

npm与yarn 其实在 yarn 推出后,npm 在 v5.* 也做了更新,引入了package-lock.json 来存储包的依赖关系。实际使用效率上,二者区别已经不太大了。使用yarn的理由如下:

  • 1、yarn 的下载界面更简洁:有明确的安装进度条、没有广告
  • 2、cnpm 的一些问题:有时候通过 cnpm 下载的包莫名不能用,不知何解。相反用 tyarn 没有这个问题。

当然,如果接手一个已有的项目,发现已存在package-lock.json文件就使用 npm,发现有yarn.lock文件就选用yarn, 来防止和同事的包版本不一致

参考链接