npm install中的缓存和资源拉取机制 您所在的位置:网站首页 dos下安装win2000时有些文件缓存不了 npm install中的缓存和资源拉取机制

npm install中的缓存和资源拉取机制

2024-07-15 00:29| 来源: 网络整理| 查看: 265

npm@5和之前的版本在缓存存储和使用上有所变化。新版已替换了旧的缓存方法,不再使用之前的npm缓存。不过如果不做离线安装的话,日常使用是无感知的。

缓存目录

npm install或npm update命令,从 远程仓库下载压缩包之后,都存放在本地的缓存目录。

在 Linux 或 Mac 默认目录是${user.home}/.npm,在 Windows 默认是${user.home}/AppData/Roaming/npm-cache。

通过配置命令,也可以直接查看缓存的具体位置。

npm config get cache # $HOME/.npm

缓存的包就放在.npm/_cacache目录下,该目录下的content-v2 目录用于缓存具体包的内容,index-v5目录用于存储依赖包的 hash。 npm 在执行安装时,可以根据 package-lock.json 中存储的 integrity、version、name 生成一个唯一的 key 对应到 index-v5 目录下的缓存记录,从而找到依赖包的 hash,然后根据 hash 去缓存目录下找到具体包的内容。

缓存机制

npm@5对npm install 的缓存机制进行了重写,--cache-min和--cache-max 是早期npm推出的缓存策略,在V5版本已被deprecated。

--cache-min和--cache-max的问题(摘自 阮一峰博客):

如果指定模块不在缓存目录,那么 npm 会连接 registry,下载最新版本。这没有问题,但是如果指定模块在缓存目录之中,npm 也会连接 registry,发出指定模块的 etag ,服务器返回状态码304,表示不需要重新下载压缩包。

如果某个模块已经在缓存之中,但是版本低于要求,npm会直接报错,而不是去 registry 下载最新版本。

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命令,它将对你的缓存进行垃圾回收,减少不需要的东西占据的磁盘使用量,并且会对索引和内容进行全面的完整性验证。

参考

v5.0.0发布说明 npm 模块安装机制简介 npm-config 作为前端工程师你真的知道 npm install 原理么?



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有