nyx_server
Version:
Node内容发布
100 lines (83 loc) • 3.4 kB
JavaScript
/* global process */
var Optimist = require("../optimist/optimist");
var help = require("../optimist/help");
var path = require("path");
var glob = require("glob");
var log4js = require("log4js");
var log = log4js.getLogger("nyx cdn");
var cdnlib = require("./lib/cdn");
var config = require("../config/default-config");
var Promise = require("bluebird");
var optimist = new Optimist();
optimist
.info('替换cdn资源,并上传到cdn')
.define('target').describe('指定需要替换、上传cnd资源的的目录,可以不填,默认所有子项目')
.usage('nyx cdn [--target subproject]').describe('替换cdn资源,并上传到cdn , ');
var argv = optimist.getArgv();
var Cdn = function(){};
Cdn.prototype.showhelp = function(){
help.detailed(optimist);
};
Cdn.prototype.optimist = function() {
return optimist;
};
Cdn.prototype.execute = function(){
var argvAnalysis = optimist.analysis;
if (argvAnalysis.options.hasOwnProperty('help') || argvAnalysis.shortKeys.hasOwnProperty('h')) {
help.detailed(optimist);
process.exit(1);
}
var targetDir = argv.target || "*"; //如果没有目标目录,查询所有目录下的子项目
return this.execute1(targetDir);
};
Cdn.prototype.execute1 = function(targetDir){
var cwd = process.cwd(); //项目,是项目根目录
var projectInfo = require(path.join(cwd , "./package.json"));
var projectName = projectInfo.name; //项目名称
var templateConfigPath = path.join(cwd , targetDir , "package.json");
return new Promise(function(resolve , reject){
glob(templateConfigPath , function(err , files){
if(err){
reject(err);
}else{
resolve(files);
}
});
}).map(function(filePath){
var packageInfo = require(filePath);
var baseDir = path.dirname(filePath);
var name = packageInfo.name; //碎片、模板名称
var cdnpath = computeCndPrefix(projectName , name);
var fullcdnpath = "http://"+config.IFENG_IMG+""+cdnpath;
return cdnlib.replacecdn(fullcdnpath , path.join(baseDir , config.DIST_DIR))
.then(function(files){
files.forEach(function(file){
console.log("CDN替换资源文件:"+file);
});
return true;
}).then(function(){
return cdnlib.uploadcdn(cdnpath , path.join(baseDir , config.DIST_DIR)).map(function(result){
log.info("上传文件:"+result.filename+"");
log.info(" |----CDN路径 :" + result.cdnpath);
return true;
}).catch(function(err){
var message = "上传CDN错误。 " + JSON.stringify(err);
log.error(message);
throw err;
});
}).catch(function(err){
console.log("CDN替换错误." , fullcdnpath);
throw err;
});
})
}
function computeCndPrefix(projectName , subname){
return "/fe/"+projectName+"/"+subname;
}
Cdn.prototype.showhelp = function(){
help.detailed(optimist);
};
Cdn.prototype.optimist = function() {
return optimist;
}
module.exports = new Cdn();