UNPKG

isv-zebra-page-generator

Version:

斑马页面(solution)生成器

157 lines (111 loc) 4.51 kB
var preview = require('isv-wh-preview'); var SeedUtil = require('isv-upx-seed-util'); var Filter = SeedUtil.Filter; // 使用 SeedUtil 中的 Filter var util = require('./util'); var url = require('url'); var _ = require('lodash'); var Promise = require('bluebird'); var Debug = require('debug'); var debug = Debug('zebra'); var debugMini = Debug('zebra:mini'); var debugError = Debug('zebra:error'); var debugExtra = Debug('zebra:extra'); var env = 'pre'; //env 仅限(local, daily, pre, prod) var PATH_MOD_BASE = 'upx'; // 模块的基准路径 var PATH_COM_BASE = 'npm'; // 组件的基准路径 var CDN_BASE = '//g.alicdn.com'; function getSeedJson(modules, endType, upxClient){ var modInfoArr = modules.map(function(mod){ return { "name": mod.name, "version": mod.version, "deps": mod.depMap } }); debugExtra('=====> 传入的 modInfoArr:', JSON.stringify(modInfoArr)); var seedConfig = { "gitGroupName" : modules[0].group, "host": CDN_BASE + '/', "type": endType, "suffix": '.cmd', "upxClient": upxClient, "modules": modInfoArr } debugExtra('=====> seedConfig:', JSON.stringify(seedConfig)); var seedUtil = new SeedUtil(seedConfig); return seedUtil.exportSeed().then(function(newSeed){ debugExtra('=====> 获取的 defaultSeed:', JSON.stringify(newSeed)); _.forEach(modules, function(mod){ // var pkg = {}; var urlObj = url.parse(mod.base); var modPathInfo = urlObj.pathname.split('/'); var baseModPath = [PATH_MOD_BASE, mod.group, mod.name].join('/'); newSeed.packages[baseModPath] = { base : urlObj.protocol + '//' + urlObj.host + '/' + modPathInfo[1] + '/' + mod.name}; }); return newSeed; }); } function getAllDepsArr(depsMap){ // 将所有依赖数组扔到页面里,外加入口文件的,upx 开始的需要取其 requires 内容 var depsArr = _.keys(depsMap).reduce(function(arr, current){ if(current.indexOf('upx/')==0){ var value = depsMap[current]; var deps = value && value.requires || []; arr.concat(deps); } else { arr.push(current); } return arr; },[]); return _.uniq(depsArr); // 需要去重 } module.exports = function(pageData, runConfig){ 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') { newSeed.modules = {}; } var endType = util.getEndType(runConfig); return Promise.resolve().then(function(){ return getSeedJson(pageData.layout.modules, endType, util.upxClient); }).then(function(newSeed){ // 合并原来的seed信息 newSeed.packages = _.assign({}, seed.packages, newSeed.packages); newSeed.modules = _.assign({}, seed.modules, newSeed.modules); debugExtra('=====> 处理后的 seed:', JSON.stringify(newSeed)); // 为了air顺利去重,只保留高版本、磨平入口文件差异; newSeed.modules = Filter.maxVersionUniq(newSeed.modules, endType); debugExtra('=====> seed 抹平版本号差异:', JSON.stringify(newSeed)); // 根据配置项生成xtpl var xtpl = util.getXtpl(siteName, branch, runConfig, newSeed, pageData); var extraDeps = getAllDepsArr(newSeed.modules); // 获取所有的额外依赖 debugExtra('=====> extraDeps require:', '<body>{{require("'+extraDeps.join(',')+'")'); // 注入到页面中去 xtpl = xtpl.replace('<body>', '<body>{{require("'+extraDeps.join(',')+'")}}'); debugExtra('====> 用于渲染的 xtpl:', xtpl); // 根据pageData组装成用于渲染的数据 var zebraData = util.reassemble(pageData, runConfig); debug('====> $pageData:', zebraData.$pageData); newSeed.modules = _.assign({}, util.removeDeps(newSeed.modules)); var config = util.zebraParams(newSeed, 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 } }); }