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

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

缓存目录

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

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

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

npm config get cache
# $HOME/.npm

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

缓存机制

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

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

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

  2. 如果某个模块已经在缓存之中,但是版本低于要求,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 原理么?

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值