当前位置: 首页 > news >正文

npm install的原理

npm install 原理流程图

缓存命中
缓存未命中
执行 npm install
解析 package.json
构建依赖树
检查缓存 npm cache
直接解压到 node_modules
从 Registry 下载包
下载压缩包 .tgz
校验完整性 SHA
存入缓存 npm cache
处理依赖嵌套
扁平化处理 node_modules 结构
处理版本冲突
生成 package-lock.json
完成安装

关键步骤解析

  1. 解析 package.json

    • 读取 dependenciesdevDependencies 字段,确定需要安装的包及版本范围。
  2. 构建依赖树

    • 分析直接依赖和间接依赖(嵌套依赖),形成完整的依赖关系树。
  3. 检查缓存

    • 查找本地缓存目录(~/.npm),如果包已缓存且版本匹配,则直接解压到 node_modules
  4. 下载包

    • 若缓存未命中,从 npm Registry(或配置的镜像源)下载压缩包(.tgz)。
  5. 校验完整性

    • 通过 SHA 校验文件完整性,防止篡改。
  6. 扁平化处理

    • npm v3+ 默认扁平化 node_modules,将依赖提升到顶层以减少嵌套(但可能引发版本冲突)。
  7. 版本冲突解决

    • 若同一包有多个版本,优先满足顶层依赖,其余版本嵌套安装在子目录中。
  8. 生成 package-lock.json

    • 锁定依赖版本和结构,确保下次安装结果一致。

补充说明

  • 缓存机制:npm 会优先使用本地缓存,显著加快安装速度。
  • 依赖提升:扁平化处理是为了解决 Windows 长路径问题,但可能导致“幽灵依赖”(未声明但能引用的包)。
  • 锁文件作用package-lock.jsonyarn.lock 确保团队协作时依赖版本一致。

相关文章:

  • 【leetcode】3. 无重复字符的最长子串
  • JAVA学习 DAY2 java程序运行、注意事项、转义字符
  • logstash拉取redisStream的流数据,并存储ES
  • Kubernetes弃用Docker:技术演进与生态变革的深度解析
  • 5.2 HarmonyOS NEXT应用性能诊断与优化:工具链、启动速度与功耗管理实战
  • Tika Server:企业级文档内容解析的轻量级服务化方案
  • 发版前后的调试对照实践:用 WebDebugX 与多工具构建上线验证闭环
  • AI大模型学习三十三、HeyGem.ai 服务端(ubuntu)docker 安装 /客户端(win)分离部署
  • CentOS 7 如何安装llvm-project-10.0.0?
  • 使用Python和OpenCV实现图像识别与目标检测
  • 负载均衡LB》》HAproxy
  • 全球长序列高分辨率光合有效辐射(PAR)(1984-2018)
  • 三、元器件的选型
  • 水库大坝安全监测系统是什么?需要用到哪些设备?
  • 分布式协同自动化办公系统-工作流引擎-流程设计
  • LeetCode 2434.使用机器人打印字典序最小的字符串:贪心(栈)——清晰题解
  • VS Code使用 SSH 扩展连接主机出现失败的解决方案
  • 【手写数据库核心揭秘系列】第10节 SQL解析树的结构,语言识别与程序执行之间的桥梁
  • 超构光学与 AR 的深度融合 | 攻克 VAC 与眼动范围难题
  • Python60日基础学习打卡Day45
  • 怎么 给自己的网站做优化呢/广州百度网站快速排名
  • 上海集团平台app/seo服务是什么
  • wordpress后台账号密码忘记/成都百度网站排名优化
  • 泰州泛亚信息做网站怎么样/深圳关键词推广优化
  • 洋桥网站建设公司/网站权重是怎么提升的
  • 专业格泰建站/搜索引擎优化的流程