@@ -60,6 +60,7 @@ And it easy to wrap for your own registry which build with `cnpmjs.org`.
|
||||
* **Compatible with NPM client**: you can use the origin NPM client with `cnpmjs.org`,
|
||||
only need to change the registry in config. Even include manual synchronization (through `install` command).
|
||||
* **Version badge**: base on [shields.io](http://shields.io/) 
|
||||
* **Support http_proxy**: if you're behind firewall, need to request through http proxy
|
||||
|
||||
**PROTIP** Be sure to read [Migrating from 1.x to 2.x](https://github.com/cnpm/cnpmjs.org/wiki/Migrating-from-1.x-to-2.x)
|
||||
as well as [New features in 2.x](https://github.com/cnpm/cnpmjs.org/wiki/New-features-in-2.x).
|
||||
@@ -72,6 +73,7 @@ as well as [New features in 2.x](https://github.com/cnpm/cnpmjs.org/wiki/New-fea
|
||||
* Mirror NPM in China: [cnpmjs.org](http://cnpmjs.org)
|
||||
* cnpm client: [cnpm](https://github.com/cnpm/cnpm), `npm install -g cnpm`
|
||||
* [How to deploy cnpmjs.org](https://github.com/cnpm/cnpmjs.org/wiki/Deploy)
|
||||
* [Sync packages through `http_proxy`](https://github.com/cnpm/cnpmjs.org/wiki/Sync-packages-through-http_proxy)
|
||||
* [wiki](https://github.com/cnpm/cnpmjs.org/wiki)
|
||||
|
||||
## Develop on your local machine
|
||||
|
||||
@@ -14,18 +14,58 @@
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var urlparse = require('url').parse;
|
||||
var urllib = require('urllib');
|
||||
var HttpAgent = require('agentkeepalive');
|
||||
var HttpsAgent = require('agentkeepalive').HttpsAgent;
|
||||
var config = require('../config');
|
||||
|
||||
var httpAgent;
|
||||
var httpsAgent;
|
||||
|
||||
if (config.httpProxy) {
|
||||
var tunnel = require('tunnel-agent');
|
||||
var urlinfo = urlparse(config.httpProxy);
|
||||
if (urlinfo.protocol === 'http:') {
|
||||
httpAgent = tunnel.httpOverHttp({
|
||||
proxy: {
|
||||
host: urlinfo.hostname,
|
||||
port: urlinfo.port
|
||||
}
|
||||
});
|
||||
httpsAgent = tunnel.httpsOverHttp({
|
||||
proxy: {
|
||||
host: urlinfo.hostname,
|
||||
port: urlinfo.port
|
||||
}
|
||||
});
|
||||
} else if (urlinfo.protocol === 'https:') {
|
||||
httpAgent = tunnel.httpOverHttps({
|
||||
proxy: {
|
||||
host: urlinfo.hostname,
|
||||
port: urlinfo.port
|
||||
}
|
||||
});
|
||||
httpsAgent = tunnel.httpsOverHttps({
|
||||
proxy: {
|
||||
host: urlinfo.hostname,
|
||||
port: urlinfo.port
|
||||
}
|
||||
});
|
||||
} else {
|
||||
throw new TypeError('httpProxy format error: ' + config.httpProxy);
|
||||
}
|
||||
} else {
|
||||
httpAgent = new HttpAgent({
|
||||
timeout: 0,
|
||||
keepAliveTimeout: 15000
|
||||
});
|
||||
httpsAgent = new HttpsAgent({
|
||||
timeout: 0,
|
||||
keepAliveTimeout: 15000
|
||||
});
|
||||
}
|
||||
|
||||
var httpAgent = new HttpAgent({
|
||||
timeout: 0,
|
||||
keepAliveTimeout: 15000
|
||||
});
|
||||
var httpsAgent = new HttpsAgent({
|
||||
timeout: 0,
|
||||
keepAliveTimeout: 15000
|
||||
});
|
||||
var client = urllib.create({
|
||||
agent: httpAgent,
|
||||
httpsAgent: httpsAgent
|
||||
|
||||
@@ -219,6 +219,10 @@ var config = {
|
||||
// always-auth https://docs.npmjs.com/misc/config#always-auth
|
||||
// Force npm to always require authentication when accessing the registry, even for GET requests.
|
||||
alwaysAuth: false,
|
||||
|
||||
// if you're behind firewall, need to request through http proxy, please set this
|
||||
// e.g.: `httpProxy: 'http://proxy.mycompany.com:8080'`
|
||||
httpProxy: null,
|
||||
};
|
||||
|
||||
if (process.env.NODE_ENV !== 'test') {
|
||||
|
||||
@@ -49,6 +49,7 @@
|
||||
"sequelize": "~2.0.1",
|
||||
"thunkify-wrap": "~1.0.4",
|
||||
"treekill": "~1.0.0",
|
||||
"tunnel-agent": "^0.4.0",
|
||||
"urllib": "~2.2.2",
|
||||
"utility": "~1.3.0",
|
||||
"xss": "~0.1.20"
|
||||
|
||||
31
test/request_with_httpproxy.js
Normal file
31
test/request_with_httpproxy.js
Normal file
@@ -0,0 +1,31 @@
|
||||
/**!
|
||||
* cnpmjs.org - test/request_with_httpproxy.js
|
||||
*
|
||||
* Copyright(c) fengmk2 and other contributors.
|
||||
* MIT Licensed
|
||||
*
|
||||
* Authors:
|
||||
* fengmk2 <m@fengmk2.com> (http://fengmk2.com)
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
// usage: http_proxy=$http_proxy node test/request_with_httpproxy.js $url
|
||||
|
||||
var config = require('../config');
|
||||
config.httpProxy = process.env.http_proxy || process.env.https_proxy;
|
||||
var urllib = require('../common/urllib');
|
||||
|
||||
var url = process.argv[2] || 'https://registry.npmjs.com';
|
||||
|
||||
urllib.request(url, {
|
||||
timeout: 15000,
|
||||
}, function (err, data, res) {
|
||||
console.log(err);
|
||||
console.log(res.status, res.headers);
|
||||
// console.log(data.toString());
|
||||
});
|
||||
Reference in New Issue
Block a user