根据 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

  

nodejs:遍历文件夹文件统计文件大小的更多相关文章

  1. 键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数,注意:用文件类型(后缀名,不包含.(点),如:"java","txt")作为key, 用个数作为value,放入到map集合中,遍历map集合

    package cn.it.zuoye5; import java.io.File;import java.util.HashMap;import java.util.Iterator;import ...

  2. Python小代码_15_遍历指定路径下的所有文件和文件夹,并格式化输出文件路径文件名和文件夹名,文件大小,修改时间

    遍历指定路径下的所有文件和文件夹,并格式化输出文件路径文件名和文件夹名,文件大小,修改时间 import osimport datetime def print_tree(dir_path): for ...

  3. java基础 File与递归练习 使用文件过滤器筛选将指定文件夹下的小于200K的小文件获取并打印按层次打印(包括所有子文件夹的文件) 多层文件夹情况统计文件和文件夹的数量 统计已知类型的数量 未知类型的数量

    package com.swift.kuozhan; import java.io.File; import java.io.FileFilter; /*使用文件过滤器筛选将指定文件夹下的小于200K ...

  4. python 遍历文件夹 文件

    python 遍历文件夹 文件   import os import os.path rootdir = "d:\data" # 指明被遍历的文件夹 for parent,dirn ...

  5. linux查看当前文件夹下每个文件大小

    查看当前文件夹下每个文件大小 并会给出当前文件大小总和,后面加具体的文件名会显示具体的文件大小 ls -lht 把*换成具体的文件名会显示具体的文件大小 du -sh *

  6. C#获取文件夹/文件的大小以及占用空间 转摘自:http://www.cnblogs.com/chenpeng-dota/articles/2176470.html

    C#获取文件夹/文件的大小以及占用空间 今天,头给了个任务:写个方法,我会给你个路径,计算这个路径所占用的磁盘空间 . 然后,找了很多资料.但大部分都是获取文件夹/文件的大小的.对于占用空间的没有成品 ...

  7. java基础IO删除文件夹文件

    /** * 定义一个方法,能够删除任意文件夹,文件夹路径由键盘录入 注意:不要在C盘下做测试,请选定无用的文件夹测试! */ 1.键盘录入 private static File getfile() ...

  8. java实现基于关键字的文件夹(文件)的搜索、文件夹(文件)的复制、删除

    最近在做一个项目,需要实现这几项功能,上网查了很多资料,自己研究了好几天终于实现了,现在与大家分享一下. 一.JAVA实现文件夹的搜索   在百度搜索N个技术文章,从哪些大牛们共享的资料中终于写出了我 ...

  9. JavaSE 文件递归之删除&amp;获取文件夹文件夹中全部的以.jpg的文件的绝对路径

    1.递归删除文件 假设一个文件夹以下还有子文件夹,进行删除的话会 报错,这个时候要使用递归的方式来删除这个文件文件夹中的全部文件以及文件夹 package cn.itcast.digui; impor ...

  10. android多国语言文件夹文件汇总

    android多国语言文件夹文件汇总如下: 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中文(香港):values-zh-rHK 英语(美国):values-e ...

随机推荐

  1. Lua 不是 C++

    http://blog.codingnow.com/2008/08/lua_is_not_c_plus_plus.html 嗯,首先,此贴不是牢骚帖. 话题从最近私人的一点工作开始.应 dingdan ...

  2. 201621123016 《Java程序设计》第八周学习总结

    1. 本周学习总结 2. 书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains源代码 ArrayList在调用contains方法时会调用indexOf方法得到 ...

  3. DZNEmptyDataSet——空白数据集显示框架

    GitHub地址:DZNEmptyDataSet DZNEmptyDataSet DZNEmptyDataSet 是基于 UITableView/UICollectionView 的范畴/扩展(cat ...

  4. iOS代码封装成.a文件(封装SDK)

    在众多开源的大神的博客里经整理如下:(已测试ok) 一.描述一下 Build ActiveArchitecture Only设置成YES: Architectures按Xcode默认配置,arm64向 ...

  5. laravel C层 (控制器)

    <?php namespace App\Http\Controllers; use App\Index; use App\Http\Controllers\Controller; class I ...

  6. WindApi2 , WindOriginalApiLibrary 突然不兼容问题

    1. 在新的电脑上从tfs拉下代码后编译, windoriginalapilibrary 这个工程弹出对话框,要求转为vs2013编译,选择同意,编译成功 2.WindApi2 的Reference列 ...

  7. 剑指OFFER之最大子向量和(连续子数组的最大和)(九度OJ1372)

    题目描述: HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天JOBDU测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但 ...

  8. 给 UILabel 中的文字增加 line-through / Strikethrough (删除线)样式

    iOS 6 中苹果引入了 NSStrikethroughStyleAttributeName 属性,用于设置 NSAttributedString 的删除线样式,用法如下: let attribute ...

  9. python操作rabbitmq实现广播效果

    生产方(Fanout_Publisher.py) # __author__ = 'STEVEN' import pika #开启socket connection = pika.BlockingCon ...

  10. 未能载入软件包“WebDriverAgentRunner”,因为它已损坏或丢失必要的资源。

    添加 YYCache.framework RoutingHTTPServer.framework