bm_scaffold_async_router
Version:
本木前端脚手架-异步路由版
141 lines (130 loc) • 3.67 kB
JavaScript
/**
* @Author: songqi
* @Date: 2016-09-01
* @Email: songqi@benmu-health.com
* @Last modified by: songqi
* @Last modified time: 2016-09-18
*/
var fs = require('fs');
var _ = require('lodash');
var exec = require('child_process').exec;
var print = require('../../utils/print');
var argv = require('yargs').argv;
var params = { //参数配置
'help': function() {
helpCommand();
},
'save': function() {
},
'save-dev': function() {
}
}
var config = {
name: 'install',
explain: '安装bower依赖',
command: 'BM bower install \r\n BM bower install <name> [<name> ..] [<options>]',
options: [{
keys: ['-h', '--help'],
describe: '查看帮助'
}]
}
function helpTitle() {
print.title(config);
}
function helpCommand() {
print.command(config);
}
function convertDeps(colle, joinSym) {
var deps = [];
switch (Object.prototype.toString.call(colle)) {
case '[object Object]':
for (var mod in colle) {
deps.push(mod + (joinSym || '#') + colle[mod]);
}
break;
case '[object Array]':
deps = {};
for (var i = 0; i < colle.length; i++) {
var item = (colle[i] + '').split(joinSym || '#');
deps[item[0]] = item[1] || '*';
}
break;
}
return deps;
}
function readFiles(path, resolve) {
fs.stat(path, function(err, stat) {
if (err == null) {
resolve && resolve(path);
} else if (err.code == 'ENOENT') {
console.log(path, ' does not exist');
} else {
console.log('Some other error: ', err.code);
}
});
}
function execShellInstall(packsStr) {
var cmd = 'bower install ' + packsStr;
console.log(cmd);
exec(cmd, function(err, stdout, stderr) {
if (err) {
console.log(stderr);
} else {
stdout && console.log(stdout);
}
});
}
function confOperator(config) {
var arg = argv._.slice(1);
var configObj = require(config);
var bower = configObj.bower;
if (!(bower && !_.isEmpty(bower.dependencies)) && !arg.length) {
console.log('no enable pack to install');
} else {
var packs = [];
if (arg.length) {
packs = arg;
if (argv.save) {
console.log('will save config');
configObj.bower = _.merge(bower, {
dependencies: convertDeps(packs)
});
fs.writeFileSync(process.cwd() + '/' + 'config.js', 'module.exports = ' + JSON.stringify(configObj, null, 4));
}
} else {
if (bower.registry) {
var conf = {
"directory": "bower_components",
"registry": bower.registry,
"timeout": 300000
}
fs.writeFileSync(process.cwd() + '/' + '.bowerrc', JSON.stringify(conf, null, 4));
}
packs = convertDeps(bower.dependencies);
}
if (packs.length) {
execShellInstall(packs.join(''));
}
}
}
function tryInstall() {
var config = process.cwd() + '/' + 'config.js';
var readFilePro = new Promise(function(resolve, reject) {
readFiles(config, function(config) {
resolve(config);
});
}).then(confOperator);
}
function run() {
if (argv.h || argv.help) {
params.help();
} else {
tryInstall();
}
}
module.exports = {
run: run,
config: config,
helpTitle: helpTitle,
helpCommand: helpCommand
}