cicp
Version:
cicp based npm
88 lines (72 loc) • 2.12 kB
JavaScript
;
require('colors');
var debug = require('debug')('cnpm:origin');
var match = require('auto-correct');
var spawn = require('cross-spawn');
var fs = require('fs');
var path = require('path');
var config = require('./config');
var parseArgv = require('./parse_argv');
var program = parseArgv();
var args = program.rawArgs.slice(2);
var CWD = process.cwd();
if (program.userconfig && !fs.existsSync(program.userconfig)) {
// make sure userconfig exists
// or it will throw: npm ERR! Error: default value must be string or number
fs.writeFileSync(program.userconfig, 'email =\n');
}
var nodeModulesDir = path.join(__dirname, 'node_modules');
var pangyp = path.join(nodeModulesDir, 'pangyp', 'bin', 'node-gyp.js');
args.unshift('--node-gyp=' + pangyp);
args.unshift('--registry=' + program.registry);
args.unshift('--cache=' + program.cache);
args.unshift('--disturl=' + program.disturl);
args.unshift('--userconfig=' + program.userconfig);
var originalNpmBin = path.join(path.dirname(process.execPath), 'npm');
var npmBin = originalNpmBin;
debug('%s %s', npmBin, args.join(' '));
var env = {
NVM_NODEJS_ORG_MIRROR: config.mirrorsUrl + '/node',
NVM_IOJS_ORG_MIRROR: config.mirrorsUrl + '/iojs',
PHANTOMJS_CDNURL: config.mirrorsUrl + '/phantomjs',
CHROMEDRIVER_CDNURL: config.mirrorsUrl + '/chromedriver',
SELENIUM_CDNURL: config.mirrorsUrl + '/selenium',
ELECTRON_MIRROR: config.mirrorsUrl + '/electron/',
// set npm config: always-auth be true
// NPM_CONFIG_ALWAYS_AUTH: 'true',
};
for (var k in process.env) {
env[k] = process.env[k];
}
var npm = spawn(npmBin, args, {
env: env,
cwd: CWD,
stdio: [
process.stdin,
process.stdout,
process.stderr,
]
});
npm.on('exit', function (code, signal) {
process.exit(code);
});
/**
* correct command
* @return {[type]} [description]
*/
function correct(command) {
var cmds = [
'install',
'publish',
'adduser',
'author',
'config',
'unpublish',
];
for (var i = 0; i < cmds.length; i++) {
if (match(command, cmds[i])) {
return cmds[i];
}
}
return command;
}