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