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')();