npm install经历了什么?
如上图:
-
install后先判断有无lock文件
lock文件是做什么的?lock直译为锁定,定义了依赖包的确定版本,install时下载定好的版本。 -
根据有无lock
- 有lock,进一步判断,目前的包的版本是否正确,也就是依赖的包的版本号与lock内规定的是否一致。
- 无lock,直接创建包的依赖关系,根据依赖关系才能下载,比如x版本的包1依赖了x版本的包2和包3.
-
根据包依赖的版本是否符合lock的规定(lock一致性)
- 依赖包版本符合lock:检查缓存内是否有需要的文件,有缓存就取出,没缓存就去仓库下载。
- 依赖包版本不符合lock:不符合lock是不能用的,需要重新下载合适的文件,下载之前必须先判断依赖关系。
-
有包依赖关系了,去获取需要的文件
- 想办法获取我们需要的x版本的文件就行,去哪里获取?去文件仓库下载,下载的文件当然是压缩包格式的。
-
压缩包也要先缓存,然后解压到node_modules,我们看到的node_modules里的文件是非压缩格式的。
tips: node_modules里的.bin
.bin是不显示文件夹,置灰的,里边放2种二进制文件,分别在Unix和Windows环境执行脚本。当我们用npm或者yarn安装一个包时,如果包内有.bin,会自动在我们的.bin文件夹内生成一个指向新.bin的执行文件。