UNPKG

isv-zebra-page-generator

Version:

斑马页面(solution)生成器

146 lines (102 loc) 4.94 kB
var _ = require('lodash'); var path = require('path'); var url = require('url'); var preview = require('isv-wh-preview'); var transform = require('isv-seed-transform'); var Debug = require('debug'); var debug = Debug('zebra'); var debugMini = Debug('zebra:mini'); var debugError = Debug('zebra:error'); var debugExtra = Debug('zebra:extra'); var util = require('./util'); var renderBaseUpx = require('./renderBaseUpx'); var CACHE_DIR = '.cachefile'; // 缓存文件夹 var CACHE_SOURCE_NATIVE = 'source.native.js'; // native对应的source文件 var CACHE_SOURCE_ORIGIN = 'source.origin.js'; // index对应的source文件 // var mockData = require('./mock.json'); var env = 'pre'; //env 仅限(local, daily, pre, prod) // var URL_SOLUTION_BASE = 'http://wh.alibaba-inc.com/prod/files/release/solution/'; module.exports = { // removeDeps: function(deps){ // 去除pc端公共的库引用,比如io等,因为这些都是通过 solution 引入了; // var str = JSON.stringify(deps); // 转换成str // var list = ['loader','node','util','dom','event-gesture','event-dom','event-custom','event','io','ua','querystring','promise','path','json','feature','base','attribute','anim','url','cookie']; // list.forEach(function(modName){ // var reg = new RegExp('\"'+modName+'\"','g'); // str = str.replace(reg,'\"\"'); // }); // debug('=====> 去除公共模块之后的依赖(字符串):',str); // debug('=====> 去除公共模块之后的依赖(json);',JSON.parse(str)); // return JSON.parse(str); // }, // 入口方法 render: function(pageData, runConfig){ var isBaseUpx = !!pageData.guideName; /* ---------------------------------------------------- 如果是基于 upx 的渲染逻辑,使用新的渲染方式 ----------------------------------------------------- */ if(isBaseUpx){ return renderBaseUpx(pageData, runConfig); } // --- end --- // === 最开始的斑马模块渲染逻辑 var siteName = runConfig.siteName || 'tb-rx-native'; // 默认使用 'tb-rx-native' 的 solution站点 var self = this; var branch = runConfig.siteBranch || 'master'; // 默认读取master分支 console.log('=== 所使用solution的信息:',siteName,'(',branch,')'); // 获取基础seed.json文件,只有h5页面会用到 var seed = util.getFileContent(siteName, branch, 'seed.json', true); // native页面不需要 seed.modules (因为写到solution中去了) if(runConfig.wh_ttid === 'native') { seed.modules = {}; } // debugExtra('====> 合并之前的seed:', JSON.stringify(seed),' --- 模块deps:', JSON.stringify(pageData.layout.modules[0].depMap)); // 循环modules,将deps.json合并到seed中 pageData.layout.modules.forEach(function(mod){ debug('====> 模块的deps:', mod.depMap); seed.modules = _.assign({}, util.removeDeps(mod.depMap), seed.modules); // 去掉一些node等工具 if(mod.group){ // seed.modules[mod.name + '/index'] = seed.modules[baseModPath + '/index']; // 如果存在.web依赖,使用该依赖 var baseModPath = mod.group + '/' + mod.name; var depsForWeb = seed.modules[baseModPath + '/index.web']; seed.modules[mod.name + '/index'] = depsForWeb ? depsForWeb : seed.modules[baseModPath + '/index']; seed.modules[mod.name + '/index.web'] = seed.modules[mod.name + '/index']; // 兼容直接引 index.web 的情形 // seed.modules[mod.name + '/index-native.xtpl'] = seed.modules[mod.group + '/' + mod.name + '/index-native.xtpl']; } var pkg = {}; var urlObj = url.parse(mod.base); var modPathInfo = urlObj.pathname.split('/'); // modPathInfo: [ '', 'mod', 'tb-countdown-1111' ] debugMini('====> modPathInfo:', modPathInfo); // 模拟 feload 转换seed // if(runConfig.wh_ttid === 'native') { var newSeed = transform(seed.modules, mod.name,'0.0.1','zebra-tb'); seed.packages = _.assign({}, seed.packages, newSeed.packages); seed.modules = _.assign({}, seed.modules, newSeed.modules); // } seed.packages[mod.name] = { base : urlObj.protocol + '//' + urlObj.host + '/' + modPathInfo[1] + '/' + mod.name}; }); // 根据配置项生成xtpl var xtpl = util.getXtpl(siteName, branch, runConfig, seed, pageData); debugExtra('====> 合并之后的seed:', JSON.stringify(seed)); // 根据pageData组装成用于渲染的数据 var zebraData = util.reassemble(pageData, runConfig); debug('====> $pageData:', zebraData.$pageData); var config = util.zebraParams(seed, xtpl, zebraData); return preview(config, env).then(data => { debugMini('=====> tmall斑马渲染内容成功'); // debug('=====> tmall斑马渲染内容:',data); return { success: true, content: data } }).catch( err =>{ debugError('=====> tmall斑马渲染失败,失败信息:', err); return { success: false, content: err } }); } }