npm 内部机制与核心原理
npm 最重要的任务是安装和维护开源库。它会优先安装依赖包到当前的项目目录,使得不同的项目的依赖各成体系,同时还能减轻包作者的 API 兼容性压力,但是这样做的缺陷也很明显:如果项目 A 和项目 B 都依赖相同的公共库 C,那么公共库 C 将会在项目 A 和项目 B 中各被安装一次。这就说明,同一个依赖包可能在电脑上多次安装。
npm 的安装机制
当我们执行npm install
命令以后,首先检查 config,获取 npm 配置。这里的优先级为:项目级的.npmrc 文件 > 用户级的.npmrc 文件 > 全局的.npmrc 文件 > npm 内置的.npmrc 文件。
然后检查项目中有无 package-lock.json 文件(简称 lock 文件)
如果有 package-lock.json 文件,那么就检查 package-lock.json 和 package.json 文件中声明的版本是否一致。
一致,直接使用 package-lock.json 中的信息,从缓存或者网络资源中加载资源。
不一致,那么根据 npm 版本进行处理(5.4.2 以上会按照 package.json 安装,并更新 package-lock.json)
如果没有 package-lock.json 文件,那么根据 package.json 文件递归构建依赖树,然后按照构建好的依赖树下载完整的依赖资源,在下载时会检查是否有相关缓存。
有缓存,将内容解压到 node_modules 中。
没有,先从 npm 远程仓库中获取包资源,检查包的完整性,并将其添加到缓存,同时解压到 node_modules 中。
最后生成 package-lock.json 文件。