isv-page-json-to-xtpl
Version:
abs 将页面 json 转换成 html
91 lines (81 loc) • 3.16 kB
JavaScript
;
let _ = require('lodash');
let request = require('sync-request');
let util = require('../../util');
let http = require('http');
let req = require('request');
let Promise = require('bluebird');
let pageAssets = require('../page-assets');
let assetsDule = module.exports = {
replaceSolutionAssets: function(xtpl, options) {
let framework = options.framework;
let formattedAssets = util.formatAssets(framework);
console.log(formattedAssets)
if (formattedAssets.js.length > 0) {
let js = formattedAssets.js[0];
//向下兼容
if(/kg\/online-pi\/0\.0/.test(JSON.stringify(framework)) || /kg\/pi\/0\.9/.test(JSON.stringify(framework))){
js = assetsDule.getAssetsContent(js);
xtpl = xtpl.replace('{{frameworkJs}}', js);
}else{
xtpl = xtpl.replace('{{frameworkJs}}', 'PAGE_ASSETS && PAGE_ASSETS.unshift("'+js+'")');
}
}
//种子资源的特殊处理
let seed = options.seed;
if(seed){
let seedContent = util.comboAssets(['require','mloader','rx-downgrade'],seed);
//向下兼容
if(/kg\/online-pi\/0\.0/.test(JSON.stringify(framework)) || /kg\/pi\/0\.9/.test(JSON.stringify(framework))){
seedContent = util.comboAssets(['require','rx-polyfill','kimi','kissy-mod-define'],seed);
}
if(seedContent.js['g.alicdn.com']){
seedContent = assetsDule.getAssetsContent(seedContent.js['g.alicdn.com']);
xtpl = xtpl.replace('{{frameworkSeedJs}}', seedContent);
}
}
return xtpl;
},
/**
* 通过资源地址获取资源内容
* @param assetPath
*/
getAssetsContent: function(assetPath){
let content = '';
//将js内容远程读取后直接注入
let res = request('GET', assetPath.replace(/^\/\//, 'http://'));
if (res.statusCode === 200) {
content = res.getBody().toString();
}
return content;
},
/**
* air 渲染后执行的方法
* 在线上不起作用,主要用于dev与预览环境
*/
afterAirRenderContentReplace: function*(content,airParams,option){
if(!option) option = {};
//调试信息
content += '\n;console.info("seed info:");console.log(JSON.parse(\'' + JSON.stringify(airParams.page.seed) + '\'));';
let scripts = pageAssets.getAssetsFromHtml('js',content);
if(scripts.length){
yield Promise.map(scripts,function(script){
return pageAssets.getAssetContent(script).then(function(result){
if(result.success && result.content){
content = content.replace('<script src="'+script+'"></script>','\n//'+script+'\n'+result.content);
}
return content;
});
})
}
//替换 html 注释
content = content.replace(/<!--[\w\W\r\n]*?-->/gmi, '');
content = content.replace(/\/\/# /gmi, '//');
if(option.dev){
//dev 去掉前端加载脚本
content = content.replace('PAGE_ASSETS = ', '');
content += '\n;console.info("留意: 本地默认使用前端rx-loader动态加载模块,再eval()执行,会导致大家 debug 代码时debug不到,这种情况请加参数 debug=true!")';
}
return content;
}
};