Node包管理工具
Contents
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下载速度过慢的问题,可以配置淘宝源
|
|
2 npx
下载并执行依赖包命令,而npm只负责依赖包的管理
npx
首先会寻找项目中已经安装的包,再寻找全局安装的包,如果都没有找到的话,npx
会先安装这个包,然后再执行命令。
3 yarn
早期的npm没有package-lock.json
文件,而yarn有,不过现在都有了
yarn
下载安装依赖包的速度要比 npm
快很多,这是因为 yarn
采用并行安装依赖的方式,而 npm
是串行。
yarn配置淘宝源
|
|
4 cnpm
因为cnpm
的镜像仓库在国内,比 npm
下载速度要快一些
但不会生成lock文件,安装依赖时也会直接忽略掉lock文件
5 pnpm
-
速度快
-
高效利用磁盘空间
-
pnpm 内部使用
基于内容寻址
的文件系统来存储磁盘上所有的文件,这个文件系统出色的地方在于: -
不会重复安装同一个包。用 npm/yarn 的时候,如果 100 个项目都依赖 lodash,那么 lodash 很可能就被安装了 100 次,磁盘中就有 100 个地方写入了这部分代码。但在使用 pnpm 只会安装一次,磁盘中只有一个地方写入,后面再次使用都会直接使用
hardlink
(硬链接,不清楚的同学详见这篇文章)。 -
即使一个包的不同版本,pnpm 也会极大程度地复用之前版本的代码。举个例子,比如 lodash 有 100 个文件,更新版本之后多了一个文件,那么磁盘当中并不会重新写入 101 个文件,而是保留原来的 100 个文件的
hardlink
,仅仅写入那一个新增的文件
。
-
-
避免蹭依赖,使得node_modules结构也更加稳定
Author gsemir
LastMod 2021-12-28