npm install的原理
npm install
原理流程图
关键步骤解析:
-
解析
package.json
- 读取
dependencies
和devDependencies
字段,确定需要安装的包及版本范围。
- 读取
-
构建依赖树
- 分析直接依赖和间接依赖(嵌套依赖),形成完整的依赖关系树。
-
检查缓存
- 查找本地缓存目录(
~/.npm
),如果包已缓存且版本匹配,则直接解压到node_modules
。
- 查找本地缓存目录(
-
下载包
- 若缓存未命中,从 npm Registry(或配置的镜像源)下载压缩包(
.tgz
)。
- 若缓存未命中,从 npm Registry(或配置的镜像源)下载压缩包(
-
校验完整性
- 通过 SHA 校验文件完整性,防止篡改。
-
扁平化处理
- npm v3+ 默认扁平化
node_modules
,将依赖提升到顶层以减少嵌套(但可能引发版本冲突)。
- npm v3+ 默认扁平化
-
版本冲突解决
- 若同一包有多个版本,优先满足顶层依赖,其余版本嵌套安装在子目录中。
-
生成
package-lock.json
- 锁定依赖版本和结构,确保下次安装结果一致。
补充说明:
- 缓存机制:npm 会优先使用本地缓存,显著加快安装速度。
- 依赖提升:扁平化处理是为了解决 Windows 长路径问题,但可能导致“幽灵依赖”(未声明但能引用的包)。
- 锁文件作用:
package-lock.json
或yarn.lock
确保团队协作时依赖版本一致。