isv-page-json-to-xtpl
Version:
abs 将页面 json 转换成 html
87 lines (79 loc) • 2.87 kB
JavaScript
;
/**
* 通过页面的模块数据,来获取页面模块的assets依赖表
* @param modules
* @returns
*/
let CDN_BASE = '//g.alicdn.com';
let _ = require('lodash');
let Promise = require('bluebird');
let http = require('http');
const Client = require('isv-module-info');
const upx = Client.upxClient('production');
const requestJSON = require('request-json');
module.exports = function* deepMap(modules, upxClient){
let packageConfig = {
packages: {
"kg": {
base: CDN_BASE + '/kg',
group:"com"
},
mtb: {
base: CDN_BASE + '/mtb',
group:"com"
},
'abs-mod-daily': {
base: CDN_BASE + '/abs-mod-daily',
group:"mod"
},
'abs-mod': {
base: CDN_BASE + '/abs-mod',
group:"mod"
}
},
modules: {},
loadErrorModules: []
};
yield Promise.map(modules, function (module){
let _upx = upxClient || upx;
return new Promise((resolve, reject) => {
let group = module.group && (module.group + '/') || '';
if (module.depMap) {
let version = module.version && (module.version + '/') || '';
let entryDep = module.depMap[group + module.name + '/' + version + 'index'];
if(!entryDep){
module.depMap[group + module.name + '/' + version + 'index'] = module.depMap[module.name + '/index'];
}
_.assignIn(packageConfig.modules, module.depMap);
} else {
// 存在这种情况,UPX OSS deps 空的,但是CDN 对的,比如 http://g.alicdn.com/abs-mod-daily/huangchao-demo15/0.0.1/deps.json
//return _upx.request('componentService.getVersionFile',[module.componentVersionId,'deps.json']).then(function(result){
let jsonClient = requestJSON.createClient('http://g.alicdn.com/');
let url = module.group + '/' + module.name + '/' + module.version + '/deps.json';
return jsonClient.get(url).then((response)=>{
var result = response.body;
if(result){
try {
//let deps = JSON.parse(result);
let deps = result;
deps[group + module.name + '/' + module.version + '/index'] = deps[module.name + '/index'] || deps[group + module.name + '/index'];
//将模块依赖注入全局依赖表,顺便可以去重
_.assignIn(packageConfig.modules, deps);
} catch (e) {
packageConfig.loadErrorModules.push(module);
}
}else{
packageConfig.loadErrorModules.push(module);
}
resolve(true);
});
}
if (module.base) {
let version = module.version && ('/' + module.version) || '';
packageConfig.packages[group + module.name + version] = {base: module.base,group:"dev"};
}
resolve(true);
});
});
return packageConfig;
};