yarn

yarn 是 Facebook 公司推出的 Node.js 包管理工具,最初是用于替代 npm 以解决管理大项目依赖时遇到的一致性、安全性和性能问题\[1\]

架构

yarn 的执行主要有以下步骤:

resolvingPackages

fetchingPackages

这一步中,yarn 会去实际获取这个包裹。获取的方法有很多,按照以下顺序进行\[2\]

  1. 尝试从本地缓存获取。macOS 下,本地的缓存在 ~/Library/Caches/Yarn/v4
  2. 尝试从本地离线缓存获取。这个文件夹的位置是 yarn 的 yarn-offline-mirror 配置项指定的
  3. 尝试从网络获取。下载地址由 resolve 步骤中获取的信息给出。

linkingDependencies

rebuildingPackages

在实践中,经常会遇到永远卡在这一步的情景\[3\]。实际上这一步的工作非常简单,只是简单地执行包裹里自有的 postinstall 脚本而已。实际出现的问题,通常是包自己在脚本里执行了下载,而网络并不通畅的缘故。