nodejs:遍历文件夹文件统计文件大小
根据 http://blog.csdn.net/hero82748274/article/details/45700465这里的思路对读写文件做了一个 封装:
webpack在打包的时候可以借助assets-webpack-plugin插件形成全部打包文件的json map,不过因为项目需要这个生成的json不能满足我的需要,我们目前需要生成形式为以下的json文件:
{
"jsFile":{ "mainSite":"mainSite.js", "size":"296.28/kb"
}, "cssFile":{ "mainSite":"mainSite.css", "size":"32.76/kb" } }
所以用nodejs的fs module实现了这个读写文件的功能,具体如下:
var fs = require('fs'); var path = require('path'); var basePath = path.join(__dirname, 'resources'); //遍历文件夹,获取所有文件夹里面的文件信息 function geFileList(folderPath,fileName) { this.folderPath=folderPath; //文件夹路径 this.fileName=fileName; this.filesList = []; //遍历读取文件 this.readFile=function(path) { var filesList=this.filesList; var files = fs.readdirSync(path);//需要用到同步读取 files.forEach(function(file) { var states = fs.statSync(path+'/'+file); if(states.isDirectory()) { this.readFile(path+'/'+file,filesList); } else { //创建一个对象保存信息 var obj = new Object(); obj.size = states.size;//文件大小,以字节为单位 obj.name = file;//文件名 obj.path = path+'/'+file; //文件绝对路径 this.filesList.push(obj); } }.bind(this)); } //写入文件utf-8格式 this.writeFile=function(data) { fs.writeFile(this.fileName,data,'utf-8',function() { console.log("文件生成成功"); }); } this.formatHandler=function() { var filesList=this.filesList; var strJSON={ "jsFile":{}, "cssFile":{} }; for(var i=0;i<filesList.length;i++) { var item = filesList[i], thisName=item.name, nameNoSuffix; if(/\.js$/.test(thisName)) { //判断是否为js文件 nameNoSuffix=thisName.split('.')[0]; strJSON["jsFile"][nameNoSuffix]=thisName; strJSON["jsFile"]["size"]=(item.size/1024).toFixed(2) +"/kb"; } else if(/\.css$/.test(thisName)) { //判断是否为css文件 nameNoSuffix=thisName.split('.')[0]; strJSON["cssFile"][nameNoSuffix]=thisName; strJSON["cssFile"]["size"]=(item.size/1024).toFixed(2) +"/kb"; } } var strJsonObj=JSON.stringify(strJSON); this.writeFile(strJsonObj); } this.init=function() { var that=this; console.log('test01'); //判断打包的时候文件路径是否存在 fs.exists(this.folderPath, function (exists) { if(exists) { that.readFile(that.folderPath); that.formatHandler(); } }); } } module.exports=geFileList;
因为我有多个项目在一起管理,需要一次性生成多个项目的json文件,所以每生成一个json文件都得实例化一个函数,比如:
//生成json map // ask json var askFileList=new geFileList(outputPath+"/ask",outputPath+'/json-ask.json'); askFileList.init();
//生成json map // web json var askFileList=new geFileList(outputPath+"/web",outputPath+'/json-web.json'); askFileList.init();
注明:用webpack的插件assets-webpack-plugin生成json,参考地址: https://www.npmjs.com/package/assets-webpack-plugin
nodeJS的fs module的API: http://javascript.ruanyifeng.com/nodejs/fs.html