UNPKG

isv-page-json-to-xtpl

Version:

abs 将页面 json 转换成 html

91 lines (81 loc) 3.16 kB
'use strict'; 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; } };