1 npm

5.4.2+版本的npm,在执行npm i命令后,会检查package.json与lock文件的异同,如果不同,会以package.json为准,并同步修改lock文件

npm下载安装依赖包的过程是串行的,因此下载速度会受到一定限制

semver标准

  • 如果写入的是〜0.13.0,则只更新补丁版本:即 0.13.1 可以,但 0.14.0 不可以。
  • 如果写入的是^0.13.0,则要更新补丁版本和次版本:即 0.13.1、0.14.0、依此类推。
  • 如果写入的是0.13.0,则始终使用确切的版本。

解决npm下载速度过慢的问题,可以配置淘宝源

1
2
npm get registry
npm config set registry http://registry.npm.taobao.org

2 npx

下载并执行依赖包命令,而npm只负责依赖包的管理

npx 首先会寻找项目中已经安装的包,再寻找全局安装的包,如果都没有找到的话,npx 会先安装这个包,然后再执行命令。

3 yarn

早期的npm没有package-lock.json文件,而yarn有,不过现在都有了

yarn 下载安装依赖包的速度要比 npm 快很多,这是因为 yarn 采用并行安装依赖的方式,而 npm 是串行。

yarn配置淘宝源

1
2
yarn config get registry
yarn config set registry https://registry.npm.taobao.org

4 cnpm

因为cnpm的镜像仓库在国内,比 npm下载速度要快一些

但不会生成lock文件,安装依赖时也会直接忽略掉lock文件

5 pnpm

  1. 速度快

  2. 高效利用磁盘空间

    • pnpm 内部使用基于内容寻址的文件系统来存储磁盘上所有的文件,这个文件系统出色的地方在于:

    • 不会重复安装同一个包。用 npm/yarn 的时候,如果 100 个项目都依赖 lodash,那么 lodash 很可能就被安装了 100 次,磁盘中就有 100 个地方写入了这部分代码。但在使用 pnpm 只会安装一次,磁盘中只有一个地方写入,后面再次使用都会直接使用 hardlink(硬链接,不清楚的同学详见这篇文章)。

    • 即使一个包的不同版本,pnpm 也会极大程度地复用之前版本的代码。举个例子,比如 lodash 有 100 个文件,更新版本之后多了一个文件,那么磁盘当中并不会重新写入 101 个文件,而是保留原来的 100 个文件的 hardlink,仅仅写入那一个新增的文件

  3. 避免蹭依赖,使得node_modules结构也更加稳定