1 Star 0 Fork 8

frankiewen/wxappUnpacker

forked from CodePorter/wxappUnpacker 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
wuConfig.js 4.26 KB
一键复制 编辑 原始数据 按行查看 历史
4qwerty7 提交于 2018-11-20 03:17 . try for #175
const wu=require("./wuLib.js");
const fs=require("fs");
const path=require("path");
const crypto=require("crypto");
const {VM}=require('vm2');
function getWorkerPath(name){
let code=fs.readFileSync(name,{encoding:'utf8'});
let commPath=false;
let vm=new VM({sandbox:{
require(){},
define(name){
name=path.dirname(name)+'/';
if(commPath===false)commPath=name;
commPath=wu.commonDir(commPath,name);
}
}});
vm.run(code.slice(code.indexOf("define(")));
if(commPath.length>0)commPath=commPath.slice(0,-1);
console.log("Worker path: \""+commPath+"\"");
return commPath;
}
function doConfig(configFile,cb){
let dir=path.dirname(configFile);
wu.get(configFile,content=>{
let e=JSON.parse(content);
let k=e.pages;
k.splice(k.indexOf(wu.changeExt(e.entryPagePath)),1);
k.unshift(wu.changeExt(e.entryPagePath));
let app={pages:k,window:e.global&&e.global.window,tabBar:e.tabBar,networkTimeout:e.networkTimeout};
if(e.subPackages){
app.subPackages=e.subPackages;
console.log("=======================================================\nNOTICE: SubPackages exist in this package.\nDetails: ",app.subPackages,"\n=======================================================");
}
if(e.navigateToMiniProgramAppIdList)app.navigateToMiniProgramAppIdList=e.navigateToMiniProgramAppIdList;
if(fs.existsSync(path.resolve(dir,"workers.js")))app.workers=getWorkerPath(path.resolve(dir,"workers.js"));
if(e.extAppid)
wu.save(path.resolve(dir,'ext.json'),JSON.stringify({extEnable:true,extAppid:e.extAppid,ext:e.ext},null,4));
if(typeof e.debug!="undefined")app.debug=e.debug;
let cur=path.resolve("./file");
for(let a in e.page)if(e.page[a].window.usingComponents)
for(let name in e.page[a].window.usingComponents){
let componentPath=e.page[a].window.usingComponents[name]+".html";
let file=componentPath.startsWith('/')?componentPath.slice(1):wu.toDir(path.resolve(path.dirname(a),componentPath),cur);
if(!e.page[file])e.page[file]={};
if(!e.page[file].window)e.page[file].window={};
e.page[file].window.component=true;
}
if(fs.existsSync(path.resolve(dir,"app-service.js"))){
let matches=fs.readFileSync(path.resolve(dir,"app-service.js"),{encoding:'utf8'}).match(/\_\_wxAppCode\_\_\['[^\.]+\.json[^;]+\;/g);
if(matches){
let attachInfo={};
(new VM({sandbox:{
__wxAppCode__:attachInfo
}})).run(matches.join(""));
for(let name in attachInfo)e.page[wu.changeExt(name,".html")]={window:attachInfo[name]};
}
}
let delWeight=8;
for(let a in e.page){
let fileName=path.resolve(dir,wu.changeExt(a,".json"));
wu.save(fileName,JSON.stringify(e.page[a].window,null,4));
if(configFile==fileName)delWeight=0;
}
if(app.tabBar&&app.tabBar.list) wu.scanDirByExt(dir,"",li=>{//search all files
let digests=[],digestsEvent=new wu.CntEvent,rdir=path.resolve(dir);
function fixDir(dir){return dir.startsWith(rdir)?dir.slice(rdir.length+1):dir;}
digestsEvent.add(()=>{
for(let e of app.tabBar.list){
e.pagePath=wu.changeExt(e.pagePath);
if(e.iconData){
let hash=crypto.createHash("MD5").update(e.iconData,'base64').digest();
for(let [buf,name] of digests)if(hash.equals(buf)){
delete e.iconData;
e.iconPath=fixDir(name).replace(/\\/g,'/');
break;
}
}
if(e.selectedIconData){
let hash=crypto.createHash("MD5").update(e.selectedIconData,'base64').digest();
for(let [buf,name] of digests)if(hash.equals(buf)){
delete e.selectedIconData;
e.selectedIconPath=fixDir(name).replace(/\\/g,'/');
break;
}
}
}
wu.save(path.resolve(dir,'app.json'),JSON.stringify(app,null,4));
cb({[configFile]:delWeight});
});
for(let name of li){
digestsEvent.encount();
wu.get(name,data=>{
digests.push([crypto.createHash("MD5").update(data).digest(),name]);
digestsEvent.decount();
},{});
}
});else{
wu.save(path.resolve(dir,'app.json'),JSON.stringify(app,null,4));
cb({[configFile]:delWeight});
}
});
}
module.exports={doConfig:doConfig};
if(require.main===module){
wu.commandExecute(doConfig,"Split and make up weapp app-config.json file.\n\n<files...>\n\n<files...> app-config.json files to split and make up.");
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/frankiewen/wxappUnpacker.git
git@gitee.com:frankiewen/wxappUnpacker.git
frankiewen
wxappUnpacker
wxappUnpacker
master

搜索帮助