- 执行项目本身的preInstall
- 遍历出项目的依赖树
a. 首先确定项目的首层依赖(dependencies和devDependencies下的模块)
b. 从首层依赖的每个模块开始,npm开启多进程遍历更深层级的模块,最终生成一颗完整的依赖树
c. 获取模块,并更新依赖树:获取版本信息 --> 获取模块实体 --> 获取模块依赖 (如果有依赖的话,再来一遍) - 将依赖树扁平化处理,并去除重复的模块
依赖中可能会包含很多重复的模块,从npm3开始,会有一个dedupe的过程,它会遍历所有的节点然后放到根节点下方,发现有重复的模块就删除掉。
重复模块的定义:模块的模块名相同且semver有交集(每个semver都对应一个版本的允许范围,如果两个模块的semver有交集,就能找到一个兼容的版本) - 安装模块:更新node_modules,并执行模块中的钩子函数(preinstall、install、postinstall)
- 执行项目的钩子函数(install、postinstall、prepublish、prepare)
- 生成或者更新版本描述文件
npm install命令都执行了哪些内容
最新推荐文章于 2024-05-06 05:10:42 发布