夜听城嚣 夜听城嚣
首页
  • 学习笔记

    • 《JavaScript高级程序设计》
    • 前端基建与架构
  • 专题分享

    • Git入门与开发
    • 前端面试题汇总
    • HTML和CSS知识点
  • 项目实践
  • 抓包工具
  • 知识管理
  • 工程部署
  • 团队规范
bug知多少
  • 少年歌行
  • 青年随笔
  • 文海泛舟
  • 此事躬行

    • 项目各工种是如何协作的
    • TBA课程学习
收藏

dwfrost

前端界的小学生
首页
  • 学习笔记

    • 《JavaScript高级程序设计》
    • 前端基建与架构
  • 专题分享

    • Git入门与开发
    • 前端面试题汇总
    • HTML和CSS知识点
  • 项目实践
  • 抓包工具
  • 知识管理
  • 工程部署
  • 团队规范
bug知多少
  • 少年歌行
  • 青年随笔
  • 文海泛舟
  • 此事躬行

    • 项目各工种是如何协作的
    • TBA课程学习
收藏
  • 导读
  • JS包管理工具和原理分析
  • yarn
    • Yarn的安装理念及如何破解依赖管理困境
      • 安装机制
      • 破解依赖管理困境
  • CI环境上的npm优化
  • 对比主流构建工具
  • Vite实现原理
  • core-js和polyfill
  • 梳理babel
  • 前端基建与架构
frost
2022-06-08

yarn

# Yarn的安装理念及如何破解依赖管理困境

yarn特点:

  • 确定性
  • 采用模块扁平安装模式
  • 网络性能更好
  • 采用缓存机制,实现了离线模式

# 安装机制

  • 检测包。
    • 检测项目中是否存在一些npm相关文件。
    • 检查系统OS、CPU等信息。
  • 解析包。
    • 获取当前项目中package.json定义。
    • 采用遍历首层依赖的方式获取依赖包的版本信息。
    • 如果在yarn.lock中没有找到包,则想Registry发起请求获取,获取后标记为已解析。

yarn

  • 获取包。
    • 检查缓存中是否存在当前依赖包。如何判断?Yarn根据cacheFolder+slug+node_modules+pkg.name生成一个path,然后判断系统中是否存在该path,有则有缓存。
    • 将缓存中不存在的依赖包下载到缓存目录。

yarn-get

  • 链接包

    • 通过扁平化原则,将项目中的依赖复制到node_modules下。

    yarn-link

  • 构建包

    • 编译依赖包中的二进制包

# 破解依赖管理困境

npm安装依赖时,将依赖放到项目的node_modules中。如果某模块A还依赖模块B,则模块B会下载到A的node_modules中,造成嵌套依赖。层级过多的话,占用空间大,安装会变慢,也不利于调试。

此外,npm包的安装顺序对依赖树的影响很大,可能影响到node_modules中文件的数量。

yarn-dep1

而yarn才用扁平化处理,避免了多余的文件和嵌套,结构更简洁清爽。

yarn-dep2

#前端笔记
上次更新: 2022/06/08, 11:25:56
JS包管理工具和原理分析
CI环境上的npm优化

← JS包管理工具和原理分析 CI环境上的npm优化→

最近更新
01
提交代码时修改commit消息
04-09
02
如何快速定位bug
02-20
03
云端web项目开发踩坑
08-25
更多文章>
Theme by Vdoing | Copyright © 2021-2025 dwfrost | 粤ICP备2021118995号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×