每周学一点Egret(13) nodejs抽离exml皮肤class名

最近在做插件的时候,尝试获取每一个exml的类名缓存起来。这样做为了解决了插件不能通过连接跳转到对应的exml文件。 整个过程,一个网友给了一个很好优化的解决方案。监控相应的文件变化。这样来好处是不用每次去阻塞读取文件进行搜索判断。 下面遍历文件夹内的exml文件,并解析皮肤的类名。让其生成一个key value 对应关系。

【exml皮肤名】 = exml地址
这里写图片描述


var fs = require('fs');
var path = require('path')

var allExml = {};

 //遍历读取文件
function geFileList(myPath)
{  
    var filesList = [];
   readFile(myPath,filesList);
   filesList.forEach( function(element) {

      var xml = fs.readFileSync(element,"utf-8");
      var array =  xml.match(/class=\"(.*?)\"/)
      if(array && array[1])
      {
         var className = array[1];
          allExml[className] = element;
      }
   });    


}

function readFile(filePath,filesList)
{
   var files = fs.readdirSync(filePath);//需要用到同步读取
   files.forEach(walk);
   function walk(file)
   {  
       var states = fs.statSync(filePath+'/'+file);         
        if(states.isDirectory())
        {
            readFile(filePath+'/'+file,filesList);
        }
        else
        {   
             if(path.extname(file)==".exml")
             {
                 filesList.push(filePath+'/'+file);
             }           
        }     
    }
}


function writeFile(fileName,data)
{  
  fs.writeFile(fileName,data,'utf-8',complete);
  function complete(err)
  {
      if(!err)
      {
          console.log("文件生成成功");
      }   
  } 
}

var tarpath = "G:\\egretdabao\\src"
var rePlaceStr = "G:\\egretdabao\\src/"
geFileList(tarpath);
var str ="";
var total = 0;
for(var key in allExml)
{
    total++;
   var temp = allExml[key].replace(rePlaceStr,'');
   console.log(temp);   
   str+= ""+"\""+key+"\""+":" +"\""+temp+"\""+",\n";
}

str = str.substr(0,str.length-2);
var templet = "class ExmlMap {\n public constructor() {\n  \n}\n public static filelen = #1; \n public static allMap ={#2};\n ";
templet = templet.replace("#2",str).replace("#1",total);

writeFile("exml.ts",templet);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值