var fs = require('fs')
let folderPath = 'web-mobile';
let pathRequire = require('path');
let pathArr = pathRequire.resolve(__dirname, '..').split("\\");
let newfolderPath = pathArr[pathArr.length-1];//'FightingSports'
let fullFilePath = folderPath+'/index.html'
let Package =
{
init()
{
let self = this;
this.quoteScriptToIndexHtml(function()
{
console.log("1,引入Script到html成功");
self.copyImg(self,function(picName)
{
console.log("2,拷贝图片成功");
self.changeCssBGPercentageAndPngName(self,picName,function()
{
console.log("3,修改Css背景图片百分比成功");
self.changeFolderName(self,function()
{
console.log("4,修改文件夹名成功");
console.log("\n打包成功!");
})
})
});
});
},
//引入Script到html
quoteScriptToIndexHtml(callback)
{
let self = this;
this.readFile(this,fullFilePath,function(str)
{
let regExp = /';
let targetStr = str.match(regExp);
// console.log(targetStr);
let addStr = '';
let replaceStr = addStr+'\n'+targetStr;
let newNata = str.replace(targetStr,replaceStr);
self.writeFile(self,newNata,fullFilePath,callback);
});
},
//拷贝图片
copyImg(self,callback)
{
let reg = /splash.+?png/;// splash.85cfd.png
let pngName = self.matchFileInFolder(folderPath,reg);
// console.log('png='+pngName);
if(pngName)
{
fs.unlinkSync(folderPath+'/'+pngName);
let picReg = /splash.+?/;// splash.85cfd.png
let picName = self.matchFileInFolder('./',picReg);
// console.log('picName='+picName);
if(picName)
{
let aPath = folderPath+'/'+file;
fs.copyFile(picName,aPath,function(err)
{
if(err) {
console.log('something wrong was happened')
}
else
{
let aName = self.getFileName(pngName);
// console.log('aName='+aName);
let aTail = self.getFileTail(picName);
// console.log('aTail='+aTail);
let newFileName = aName+'.'+aTail;
// console.log('newFileName='+newFileName);
// console.log('copy file succeed');
let oldPath = folderPath+'/'+picName;
let newPath = folderPath+'/'+newFileName;
self.rename(oldPath,newPath,function()
{
callback(newFileName);
});
}
});
}
}
},
// 修改Css背景图片百分比
changeCssBGPercentageAndPngName(self,picName,callback){
let reg = /style-mobile.+?css/;// style-mobile.6e9cd.css
let cssName = self.matchFileInFolder(folderPath,reg);
if(cssName)
{
let aPath = folderPath+'/'+file;
this.readFile(this,aPath,function(str)
{
//change percentate
let targetStr = 'background-size: 45%;';
let replaceStr = 'background-size: 100%;';
let newNata = str.replace(targetStr,replaceStr);
//change png link
let fileName = self.getFileName(picName);
// console.log('fileName='+fileName);
// console.log('picName='+picName);
let newNata2 = newNata.replace(fileName+'.png',picName);
// console.log(newNata)
self.writeFile(self,newNata2,aPath,callback);
});
}
},
//修改文件夹名
changeFolderName(self,callback)
{
let deleteall = function(path)
{
var files = [];
if(fs.existsSync(path))
{
files = fs.readdirSync(path);
files.forEach(function(file, index)
{
var curPath = path + "/" + file;
if(fs.statSync(curPath).isDirectory())
{ // recurse
deleteall(curPath);
}
else
{ // delete file
fs.unlinkSync(curPath);
}
});
fs.rmdirSync(path);
}
if(!fs.existsSync(newfolderPath))
{
self.rename(folderPath,newfolderPath,callback)
}
};
// delete FightingSports
deleteall(newfolderPath);
},
readFile(self,path,callback)
{
fs.readFile(path, function (error, data)
{
if (error)
{
// 在这里就可以通过判断 error 来确认是否有错误发生
console.log('读取文件失败了')
}
else
{
//
// 文件中存储的其实都是二进制数据 0 1
// 这里为什么看到的不是 0 和 1 呢?原因是二进制转为 16 进制了
// 但是无论是二进制01还是16进制,人类都不认识
// 所以我们可以通过 toString 方法把其转为我们能认识的字符
// console.log(data.toString())
var str = data.toString();
callback(str);
}
});
},
writeFile(self,newNata,path,callback)
{
// fs.wirteFile有三个参数
// 1,第一个参数是要写入的文件路径
// 2,第二个参数是要写入得内容
// 3,第三个参数是可选参数,表示要写入的文件编码格式,一般就不写,默认就行
// 4,第四个参数是个回调函数 只有一个参数error,来判断是否写入成功
fs.writeFile(path, newNata, error =>
{
if (error) return console.log("写入文件失败,原因是" + error.message);
// console.log("写入成功");
callback();
});
},
rename(oldPath,newPath,callback)
{
//同以目录下的文件更名:
fs.rename(oldPath,newPath, function(err)
{
if(err)
{
throw err;
}
// console.log('rename done!');
callback();
});
},
matchFileInFolder(path,reg)
{
const files = fs.readdirSync(path);
for (file of files) {
let result = reg.test(file);
if(result)
{
return file;
}
}
return null;
},
getFileName(name)
{
let namePartArr = name.split('.');
return name.replace('.'+namePartArr[namePartArr.length-1],'');
// if(name.indexOf('.png')!=-1)
// {
// return name.split('.png')[0];
// }
// else if(name.indexOf('.jpg')!=-1)
// {
// return name.split('.jpg')[0];
// }
},
getFileTail(name)
{
let namePartArr = name.split('.');
return namePartArr[namePartArr.length-1];
// if(name.indexOf('.png')!=-1)
// {
// return 'png';
// }
// else if(name.indexOf('.jpg')!=-1)
// {
// return 'jpg';
// }
// return '';
}
}
let package = Object.create(Package);
package.init();