离线缓存这一功能可以让 Yarn 在网络出现故障的情况下仍然能正常工作(无论是因为你的雇主没有支付水电费,还是因为你的软件包托管服务不可用)。这也是 零安装 的一个重要组成部分,并且不会为任何软件包保存多个副本,使其适合存储在源码仓库中,就是我们在 Yarn 源码仓库中所做的一样。
其工作方式很简单:每次从远程位置(在此处的上下文中,“远程位置”是一个通用术语,以 file:
协议列出的依赖项也拥有一个远程位置,即使它只是本地文件系统而已)下载一个软件包后,都会在缓存中保存一份副本。下次需要安装相同的软件包时,Yarn 将使用缓存中存储的版本,从而无需从其原始位置下载了。
本地缓存的位置是相对于项目根目录的,可以通过 cacheFolder
进行配置。默认情况下,其位于 .yarn/cache
。
禁用缓存
由于 PnP(从 zip 压缩文件中直接读取文件)是基于离线缓存功能的,因此无法禁用缓存。话虽如此,如果需要的话,删除缓存目录是绝对安全的,当下次运行 yarn install
时,该缓存将被重建。
当设置为 共享缓存 时就可以禁用本地缓存,在这种情况下,将使用全局缓存。
通过配置 enableMirror
可以禁用全局镜像。当使用本地缓存时不建议这样做,因为全局镜像时本地缓存和网络之间的一个中间层,它的作用时存储所有下载下来的软件包一共将来使用,以便减少安装时间。
清理缓存
当你删除或升级软件包时,Yarn 将自动将不需要的软件包从缓存中清除。如果需要手动清理缓存,可以使用 yarn cache clean
命令。
对于全局镜像,必须使用 yarn cache clean --mirror
命令手动清除。
共享缓存
从 Yarn v2 开始,默认情况下,Yarn 会将缓存配置到项目本地。这样做的目的为了让你可以更轻松地将其作为源码仓库的一部分进行存储,我们认为这是确保无论软件包注册表(package registries)是否可用,仍然可以为项目安装依赖项的最佳方法。
不过,这种方法并不能应付每一种情况。例如,你可能正在使用一个小型库,却并不太注意将缓存提交到源码仓库中。如果你面临的是这种情况,只需将以下配置添加到项目中的 .yarnrc.yml
文件中即可。此配置将指示 Yarn 使用某个特殊路径,该路径将由所有具有相同配置的项目共享。
enableGlobalCache: true
共享缓存的位置始终为 <globalFolder>
/cache
,与全局镜像的位置相呼应。
缓存的完整性
由于归档文件的校验码存放在锁文件(lockfile)中,因此任何缓存文件的损坏都将在安装时被检测到,并且会提示你来解决此问题,即删除损坏文件或更新校验码。除了高级用户并且在非常特定的情况下外,后一种方式无法达成。