UNPKG

fis3-postpackager-h5cachejson

Version:
186 lines (142 loc) 5.81 kB
/** * Created by jg on 17/06/07. */ var cacheObj = { "OriginalData": { "H5CacheList": [] } }; //var h5Cache = fis.project.getProjectPath(); //var h5CacheJson = h5Cache + '/view/ksyun_web_cache.json'; var rStyleScript = /(?:\s*(<link([^>]*?)(stylesheet){1}([^>]*?)(?:\/)?>))/ig; var linkScript = /(?:(\s*<script([^>]*)>([\s\S]*?)<\/script>))/ig; var scriptSrc = /(?:\ssrc\s*=\s*)('([^<>']+)'|"([^<>\"]+)")/i; var styleUrl = /(?:\shref\s*=\s*)('([^'<>]+)'|"([^"<>]+)"|[^\s\/>]+)/i; function cachePackager(ret, pack, settings, opt) { // 读取ret下的源文件 // var files = ret.src; // console.log(files['/pages/newbattle/index.html']); // 读取pack映射关系树 // console.log(settings); // console.log(opt); // 读取打包后的文件 // console.log(ret.pkg['/pages/newbattle/index.html']); // console.log(ret.pkg['/pages/newbattle/index.html'].getContent()); var catchMaps = {}; var fileCache = ret.src[settings['jsonFile']]; var themeCache = ret.src[settings['themeFile']]; themeConfig = JSON.parse(themeCache.getContent()) console.log(themeConfig); // 编译总文件 var files = ret.pkg; Object.keys(files).forEach(function(subpath) { //console.log(subpath); var file = files[subpath]; //console.log(file.isHtmlLike); //console.log(file.useMap); compile(file); }); Object.keys(themeConfig).forEach(function(busid) { var newJsonFileName = fileCache.realpathNoExt + "_" + busid + '.json'; // console.log(newJsonFileName); var newJsonFile = fis.file.wrap(newJsonFileName); var newCacheMaps = []; var themeId = themeConfig[busid]['theme']; Object.keys(catchMaps).forEach(function(url) { var urlMaps = catchMaps[url]; var urlSel = url.split('\/'); var defaultUrl = [urlSel[0], 'default', urlSel[1]].join("\/"); var themeUrl = [urlSel[0], 'theme_' + themeId , urlSel[1]].join("\/"); if(urlMaps[themeUrl]) { newCacheMaps.push(urlMaps[themeUrl]); } else { newCacheMaps.push(urlMaps[defaultUrl]); } }); newJsonFile.setContent(JSON.stringify(newCacheMaps, null, 2)); //fis.compile.process(newJsonFile); // 添加对本theme的依赖 否侧watch下不更新此theme //newJsonFile.cache.addDeps(themeCache.realpath); // newJsonFile.links.forEach(function(derived) { // fileCache.addLink(derived); // }); // fileCache.derived.push(newJsonFile); // fis.release(); ret.pkg[newJsonFile.subpath] = newJsonFile; }); cacheObj.Type = settings.Type || 4; cacheObj.Version = parseInt(new Date()*1 / 1000) ; //settings.Version; cacheObj.SdkVersion = settings.SdkVersion; cacheObj.OriginalData.H5CacheList = catchMaps; //console.log(fileCache.getContent()); fileCache.setContent(JSON.stringify(cacheObj, null, 2)); //console.log(fileCache.getContent()); // writeFile(h5CacheJson, JSON.stringify(cacheObj, null, 2)); function compile(file) { // 暂时处理html文件 if (file.release === false || !file.isHtmlLike) { return; } // if(file.filename === "follow") { // console.log(file); // console.log(file.getHash()); // }; var rUrl = file.subpathNoExt.slice(1).split('/'); // 老模式模板 if (rUrl.length === 3 && rUrl[1] === 'home') { var oldRUrl = rUrl[2].split('_'); rUrl[2] = oldRUrl[0]; rUrl[3] = 'default'; rUrl[4] = oldRUrl[1]; } var cacheActions = settings.cacheActions; if(rUrl[2] && rUrl[4] && cacheActions.indexOf(rUrl[4]) > -1) { var cacheList = { md5: '', url: '', js_list: [], css_list: [] }; var themeUrl; var queryUrl; // 修改script文件的引用 var content = file.getContent(); themeUrl = [rUrl[2], rUrl[3], rUrl[4]].join('\/'); queryUrl = [rUrl[2],rUrl[4]].join('\/'); cacheList["md5"] = md5(content, 32); // file.getHash() 可能出错; cacheList["url"] = "\/" + queryUrl; var linkArray = content.match(rStyleScript); var scriptArray = content.match(linkScript); //css过滤 if(linkArray){ linkArray.forEach(function(v){ var href = v.match(styleUrl); if(href){ href = RegExp.$1.replace(/\'|\"/ig,'').trim(); cacheList["css_list"].push(href); } }) } //js过滤 if(scriptArray){ scriptArray.forEach(function(v){ var src = v.match(scriptSrc); if(src){ src = RegExp.$1.replace(/\'|\"/ig,'').trim(); cacheList["js_list"].push(src); } }) } catchMaps[queryUrl] = catchMaps[queryUrl] || {}; catchMaps[queryUrl][themeUrl] = cacheList; } }; function writeFile(path, data){ fis.util.write(path, data, 'utf-8', false); } function md5(data, len){ return fis.util.md5(data, len); } } module.exports = cachePackager;