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

  

转载于:https://www.cnblogs.com/laneyfu/p/6270643.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值