为了性能优化,找出项目中没有用到的css、png、jpeg、jpg、js文件,对项目总体的资源有一个管理控制。
### 技术栈
glob、ac多字符自动机、fs、path
findNouseSource.js
//findNouseSource.js
const fs=require('fs');
const acSearch=require('./acSearch');
//找出项目中没有用到的资源
function findNouseSource(sourceFileArr,textFileArr,keyFunc){
let sourceKepMap={}
sourceFileArr.forEach(function (filepath,i) {
const key=keyFunc(filepath);
if(!sourceKepMap[key]){
sourceKepMap[key]=[i];
}else{
sourceKepMap[key].push(i)
}
})
const keys=Object.keys(sourceKepMap)
const nouseSourceArr=[].concat(sourceFileArr);
textFileArr.forEach(function (filepath) {
const text=fs.readFileSync(filepath).toString();
const keyArr=acSearch(keys,text).map((item)=>item.str)
keyArr.forEach(function (key) {
sourceKepMap[key].forEach(function (index) {
nouseSourceArr[index]=false;
});
})
})
return nouseSourceArr.filter((item)=>item)
}
module.exports=findNouseSource;
//app2.js //找出项目中没有用到的资源 const fs=require('fs'); const path=require('path'); const glob=require('glob'); const findNouseSource=require('./utils/findNouseSource'); const srcDir='./src/'; //ignone function filterIgnone(filepath) { if(//(build|libs)//.test(filepath)){ return false; } if(/web-server/.test(filepath)){ return false; } return true; } //被搜索的资源 let textFileArr=glob.sync(srcDir+'**/*.+(html|js|css|ejs|less)').filter(filterIgnone); //png 全名搜索和js 文件name搜索 let sourceFileArr=glob.sync(srcDir+'**/*.+(css|png|gif|jpg|jpeg)').filter(filterIgnone); let jssourceFileArr=glob.sync(srcDir+'**/*.+(js)').filter(filterIgnone); const nouseSource=findNouseSource(sourceFileArr,textFileArr,function (filepath) { return path.basename(filepath); }) // console.log(nouseSource) const nouseJsSource=findNouseSource(jssourceFileArr,textFileArr,function (filepath) { return path.basename(filepath,'.js'); }) // console.log(nouseJsSource) const toText={ lenArr:[nouseSource.length,nouseJsSource.length], nouseSource, nouseJsSource, } fs.writeFileSync('./dist/nouse.map',JSON.stringify(toText,null,2))
nouse.map