目标:了解npm的缓存压缩文件在哪,install时是怎么匹配到本地缓存压缩文件的
缓存策略网上比较容易找到。一句话总结就是:去缓存目录找,找到就用,没找到就去下载,然后放到缓存目录。但是如何匹配到本地具体的缓存文件呢?下面开始~
1. 找到缓存目录
npm config get cache
2. 进如缓存目录后看到如下目录结构(装的包越多,文件越多,为了测试方便,删除了其他缓存文件)
3. 查看content-v2和index-v5中的文件
这里最重要的就是_cacache中的content-v2和index-v5里的文件。
content-v2存放的就是缓存压缩文件
- 通过
file命令可以看到是个压缩包,也可以通过tar -zxvf 文件解压,发现就是放到node_modules里的包具体文件
index-v5存放了各个包的信息
- 格式化后的文件,原先是一行,真实使用注意要还原回去,不然匹配不到
- 其中
key就描述了包压缩文件的远程地址信息,而intergrity字段描述了这个包的加密算法与摘要,其实就是通过他来找到压缩文件的
4. content-v2和index-v5里文件的具体使用
假设已经满足使用本地缓存策略,此时npm如何找到并使用缓存压缩文件呢?
通过查看源码可以发现
-
install遍历拿到所有的index-v5种的文件,并获取它的
key和integrity。a.
key确定是要找哪个包。通过最后的后缀很容易发现,如npm-test-demo-second-1.0.0.tgz就是要找npm-test-demo-second的1.0.0版本。b.
integrity确定找到这个包的具体压缩文件在哪个文件夹中。 -
通过
integrity得出压缩位置的方法(源码在 npm/cli的node_modules/ssri/lib/index.js)。
- 通过上面解析可以计算下
npm-test-demo-second的压缩包位置是否正确。
通过观察发现,content-v2/sha512中的文件夹目录+文件名就是`integrity`的摘要配合步骤2计算得到的。
以上就是npm如何匹配到本地缓存压缩文件的全部步骤。
参考链接:
npm install 拉取机制 blog.csdn.net/daihaoxin/a…
缓存如何运行的(已过时,但思路可以借鉴):www.zhihu.com/question/30…