UNPKG

nyx_server

Version:

Node内容发布

100 lines (83 loc) 3.4 kB
/* 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();