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 确保团队协作时依赖版本一致。
相关推荐
0思必得01 天前
[Web自动化] Selenium处理动态网页
前端·爬虫·python·selenium·自动化
东东5161 天前
智能社区管理系统的设计与实现ssm+vue
前端·javascript·vue.js·毕业设计·毕设
catino1 天前
图片、文件的预览
前端·javascript
layman05281 天前
webpack5 css-loader:从基础到原理
前端·css·webpack
半桔1 天前
【前端小站】CSS 样式美学:从基础语法到界面精筑的实战宝典
前端·css·html
AI老李1 天前
PostCSS完全指南:功能/配置/插件/SourceMap/AST/插件开发/自定义语法
前端·javascript·postcss
_OP_CHEN1 天前
【前端开发之CSS】(一)初识 CSS:网页化妆术的终极指南,新手也能轻松拿捏页面美化!
前端·css·html·网页开发·样式表·界面美化
啊哈一半醒1 天前
CSS 主流布局
前端·css·css布局·标准流 浮动 定位·flex grid 响应式布局
PHP武器库1 天前
ULUI:不止于按钮和菜单,一个专注于“业务组件”的纯 CSS 框架
前端·css
电商API_180079052471 天前
第三方淘宝商品详情 API 全维度调用指南:从技术对接到生产落地
java·大数据·前端·数据库·人工智能·网络爬虫