pnpm-lock.yaml
、yarn.lock
和 package-lock.json
都是用来锁定项目依赖版本的文件,它们由不同的包管理器生成:pnpm-lock.yaml
由 pnpm 生成,yarn.lock
由 Yarn 生成,package-lock.json
由 npm 生成。这些锁定文件的主要目的是确保在不同的环境中,项目的依赖项版本始终保持一致。以下是这三者之间的一些主要区别:
一、格式问题
pnpm-lock.yaml
使用 YAML 格式,yarn.lock
使用一种类似于 TOML 的自定义格式,而 package-lock.json
使用 JSON 格式。
二、依赖项的存储方式
pnpm 使用一种称为“硬链接”的方式来存储依赖项,这种方式可以节省存储空间。而 npm 和 Yarn 则复制依赖项到每个项目的 node_modules 目录中。
三、下载依赖上的区别
pnpm-lock.yaml:当某个包在pnpm-lock.yaml能找到,且市场上该包存在更新的版本时,且在package.json中存在^~允许更新时,开发者在下载依赖时还是会以pnpm-lock.yaml中的包的版本去下载依赖,不会自动下载更新的版本。
package-lock.json:package-lock.json的“版本锁定”的表现和pnpm-lock.yaml一致
yarn.lock:当市场有比yarn.lock的包更新时且package.json中存在^~允许更新时,那么yarn会自动安装比yarn.lock更新的版本并且主动修改yarn.lock
四、性能
在安装大量依赖项的情况下,pnpm 和 Yarn 的性能可能优于 npm
原因如下:
1、磁盘空间的使用:npm在每个项目的node_modules中都会安装所有的依赖项,这导致了大量的磁盘空间被重复使用。而pnpm和yarn则采用了不同策略。pnpm使用了一个全局存储来保存所有项目的依赖项,只在项目的node_modules目录中创建对全局存储中的依赖项的链接,从而大大减少了磁盘空间的使用。yarn则通过缓存已下载的依赖项来减少磁盘空间的使用。
2、并行安装:npm在安装依赖项时是按顺序一个接一个地进行的,而pnpm和Yarn则可以同时安装多个依赖项,从而提高了安装速度。
3、网络性能:Yarn引入了一个离线模式,这意味着一旦一个包被下载,它将被缓存在本地,以后的安装可以直接从缓存中获取,而不必从网络上下载。这大大提高了在网络连接不佳或者完全没有网络连接的情况下的性能。