1 Star 2 Fork 19

守候心灵 / wxappUnpacker

forked from xiaokar / wxappUnpacker 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
wuConfig.js 4.15 KB
一键复制 编辑 原始数据 按行查看 历史
xiaokar 提交于 2021-01-05 22:35 . 2021/1/5最新可用版本
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.");
}
1
https://gitee.com/chaiwenjun/wxapp-unpacker.git
git@gitee.com:chaiwenjun/wxapp-unpacker.git
chaiwenjun
wxapp-unpacker
wxappUnpacker
master

搜索帮助