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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM