美文网首页
npm6分析

npm6分析

作者: 小猋_a8f1 | 来源:发表于2019-12-18 17:30 被阅读0次

    npm版本:6.12.1
    缓存目录默认是~/.npm/_cacache, 有index-v5、content-v2、tmp子目录

    以安装mkdirp为例分析, 找到下载的源码实际存储位置

    • 获取tarball地址

    npm v mkdirp

    dist
    .tarball: http://npmprivate.xxx.com/mkdirp/-/mkdirp-0.5.1.tgz
    .shasum: 30057438eac6cf7f8c4767f38648d6697d75c903
    
    • 在index-v5中查找,可以看到一些信息,但还无法定位到存储位置,有网友说根据_shasum去找,前4位是目录名,实际有些包对应不上

    grep -r "http://npmprivate.xxx.com/mkdirp/-/mkdirp-0.5.1.tgz" ~/.npm/_cacache/index-v5

    /Users/xuezhijie/.npm/_cacache/index-v5/9a/31/0d6e1c20753f4caddf9a0f3255ae29844dd5720b8033df6b095199c7da57:52a4f41b14df35db86640b933fda71742ec6d4e2 {"key":"make-fetch-happen:request-cache:h
    
    • content-v2存储了下载的包,可以通过cacache包去查看, 写个工具脚本
    const cacache = require('cacache')
    const fs = require('fs')
    
    const cachePath = '/Users/xuezhijie/.npm/_cacache'
    
    ;(async function () {
      let data = await cacache.ls(cachePath)
      console.log(data)
      fs.writeFileSync('./cache.json', JSON.stringify(data))
    
      // await cacache.rm.all(cachePath)
      // console.log('removed');
    })();
    

    在生成的json文件找查找mkdirp

    "make-fetch-happen:request-cache:http://npmprivate.xxx.com/mkdirp/-/mkdirp-0.5.1.tgz": {
        "key": "make-fetch-happen:request-cache:http://npmprivate.xxx.com/mkdirp/-/mkdirp-0.5.1.tgz",
        "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
        "path": "/Users/xuezhijie/.npm/_cacache/content-v2/sha1/30/05/7438eac6cf7f8c4767f38648d6697d75c903",
        "size": 4991,
        "time": 1576660727569,
    

    path属性就是实际存储位置,验证下格式,发现是gzip,重名为tar.gz后解压就得到源码了

    file /Users/xuezhijie/.npm/_cacache/content-v2/sha1/30/05/7438eac6cf7f8c4767f38648d6697d75c903

    /Users/xuezhijie/.npm/_cacache/content-v2/sha1/30/05/7438eac6cf7f8c4767f38648d6697d75c903: gzip compressed data, from Unix, original size 38912
    

    相关文章

      网友评论

          本文标题:npm6分析

          本文链接:https://www.haomeiwen.com/subject/pyvunctx.html