zoukankan      html  css  js  c++  java
  • 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

      

  • 相关阅读:
    php http_build_query 将布尔值类型转为整型的问题
    一天一个 Linux 命令(34):free 命令
    Laravel 如何使用 PHP 内置的服务器启动服务
    一天一个 Linux 命令(33):top 命令
    Java基础(5)-Java数据类型
    Java int和Integer有什么区别
    Java异常处理常见问题
    PHP重载,不一样的重载
    nginx 反向代理 proxy_pass详解
    composer repositories仓库配置,命令行修改仓库地址
  • 原文地址:https://www.cnblogs.com/laneyfu/p/6270643.html
Copyright © 2011-2022 走看看