实现一个自己的npm registry

npm install -g gulp

这个是从npmjs.com下载gulp,然后安装到本地的$PATH目录里面

打开terminal ,输入:echo $PATH即可看到本地的path。输入which npm  可以看到npm安装在/usr/local/bin/npm目录下。

我们知道npm的registry是https://registry.npmjs.org/

下面已request为例(https://www.npmjs.com/package/request)

1、npm install request

     npm执行两件事:

     a)  请求  https://registry.npmjs.org/request  

这里可以获取到request最新的tags是多少,这里是2.88.0,那么在version里面就会列出每一个版本的信息,我们找到2.88.0,

里面有这个版本号的下周地址:https://registry.npmjs.org/request/-/request-2.88.0.tgz

    b) 请求https://registry.npmjs.org/request/-/request-2.88.0.tgz对应版本的地址,下载request包。

        router.get('/registry/:name/-/:filename', authvalid, download);

 

  PS:     如果是版本号,那就指定版本号请求就OK。

       比如npm install request@2.88.0,则执行https://registry.npmjs.org/request/2.88.0

      

       //获取私有域模块信息

      router.get(/^\/registry\/[^\/]+(\/)*$/,authvalid,listAllVersions);

      //获取指定版本号

      router.get(/^\/registry\/[^\/]+(\/)+[^\/]+(\/)+$/,authvalid,oneVersions);

2、npm publish

     执行此命令,是发布版本,会读取package.json的文件,生成versions,dist-tags,将包文件打包,生成.tgz

var pkg = ctx.request.body;

var username = ctx.user.name;

var name = ctx.params.name || ctx.params[0];

var filename = Object.keys(pkg._attachments || {})[0];

var version = Object.keys(pkg.versions || {})[0];

    _attachments.content_type:application/octet-stream

    _attachments.data  包内容

// 上传压缩包
  var tarballBuffer;
  tarballBuffer = new Buffer(attachment.data, 'base64');

  //确保latest tag正确
var distTags = pkg['dist-tags'] || {};
  if (!distTags.latest) {
    // need to check if latest tag exists or not
    xxx
    if (!latest) {
      // auto add latest
      tags.push(['latest', tags[0][1]]);
    }
  }

  shasum = crypto.createHash('sha1');
  shasum.update(tarballBuffer);
  shasum = shasum.digest('hex');

  var options = {
    key: getKey(),
    shasum: shasum
  };
uploadBuffer(tarballBuffer, options);

 getKey 即获取储存路径 https://registry.npmjs.org/request/-/request-2.88.0.tgz   

 router.put(/^\/registry\/[^\/]+(\/)*$/,authvalid,save);     

const router = require('koa-router')();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值