缓存命中
npm install或npm update命令,从 registry 下载压缩包之后,都存放在本地的缓存目录:~/.npm/cacache, 里面有三个文件夹
npm在安装依赖的时候,根据package-lock中具体包的version,name和integrity信息(没有lock只能去请求registry了),用pacote:range-manifest:{url}:{integrity}生成唯一key,通过SHA256得到的hash,去_cacache/index-v5里找对应的文件,就能拿到基本的meta信息缓存了,前四位hash用来分路径
如果依赖信息改变了则生成的hash没有对应缓存信息可以命中,会重新下载再更新缓存
这个shasum就是tar包的hash,用这个hash去_cacache/content-v2里找到对应的gzip(tgz)缓存,解压缩后得到对应依赖的tar包
缓存机制
npm install在执行的时候,首先构建依赖树,依次安装依赖树中的每个包。
如果缓存中有依赖包,就会向远程仓库确认是否过期(304检查)检查,如果过期,就使用新的返回数据刷新缓存,否则就直接使用缓存中的数据。
另外根据是否离线或失去对目标远程仓库的访问权限,npm还提供了fallback-to-offline模式。该模式使无法访问远程仓库的情况下,npm将直接使用本地缓存。
无论何时离线,npm都会尽可能地回退到缓存中-而不是坚持重试网络请求或失败
此外还提供了新的参数,是用户可以指定缓存使用的策略
–prefer-offline: 将使npm跳过任何条件请求(304检查)直接使用缓存数据,只有在缓存无法匹配到的时候,才去访问网络。这样我们将依赖包添加到项目的过程就会快很多。
例如,npm install express –prefer-offline将现在缓存中匹配express,只有在本地缓存没有匹配到的情况下,才去联网下载。
–prefer-online: 与它将强制npm重新验证缓存的数据(使用304检查),并使用重新验证的新鲜数据刷新缓存。
–offline 将强制npm使用缓存或退出。如果尝试安装的任何内容尚未在缓存中,则它将出现代码错误。
可以通过.npmrc或者npm config set来设置缓存使用的策略。
一个新的npm cache verify命令,它将对你的缓存进行垃圾回收,减少不需要的东西占据的磁盘使用量,并且会对索引和内容进行全面的完整性验证。
本文转载自: 掘金