nodeはjsonおよびnodeイベントの入門を導入する

2435 ワード

この時ふと一つの問題を思いついた.
一部のフォルダには、サードパーティが大量に導入し、抽出する必要のないファイルがあります.これらのファイルをフィルタリングしないと、最後に生成されるファイルツリーには多くの不要なパスが必要になります.この場合、gitIgnore機能に似たファイルを作成して、関連する構成を行う必要があります.このときnodeがjsonを読み込む
node読み出しjson
Nodeシステムは、requireがjsonを迅速に導入する方法を提供します.ファイル読み込みの形式でも、このリンクを参考にしてみると、jsonにBOM関連のものがあれば追加で処理する必要があるというスレッドがありますが、ここではこの問題に遭遇しないので、しばらく検討しないでください~
nodeイベント
コードに大量の非同期操作が必要であるため,sync同期で処理しなければならないAPIに加えて,より推奨される非同期処理方法を探している.一番おすすめしないのは、コールバックセットコールという書き方です.Nodeのイベントシステムはこのニーズをうまく処理することができる.しかし、ドキュメントのeventsは依然として解釈が腐っている.この时、この招待状を参考にしてnodeのイベントシステムを熟知しました.
コードは次のとおりです.
const event = require('events').EventEmitter; //      
fs.readFile(item+'\\GPIgnore.json','utf8',function (err,data) {
      emitter.emit('aaa',data); //    
});
emitter.on('aaa',function (data) { //    
    console.log(data)
})

ここでは、フォルダパスの下にGPIgnoreがある場合の論理を行います.json(generatePath)の場合、ディレクトリは読み込む必要があり、パスの下にこのファイルがなければ、このフォルダは読み込まれないと考えられます.
このフェーズが終了した後のコードは次のとおりです.
const path = require('path');
const fs = require('fs');
const event = require('events').EventEmitter;
//             
const  rootPathList = fs.readdirSync('./');
let rootFileList = [],
    rootDirList = [],
    realDirList = [];
getRootPathList();
generateFileTree();
function getRootPathList(){
    rootPathList.forEach(function (item, index) {
        let fsStats = fs.statSync(item);
        if(fsStats.isFile()){   //           。
            rootFileList.push(item);
        }else if(fsStats.isDirectory()){
            rootDirList.push(item);
        }
    })
}

function generateFileTree(path){
    const emitter = new event();
    rootDirList.forEach(function (item) {
        //              
         try{
            file = fs.readFileSync(item+'\\GPIgnore.json','utf8');
        }catch (e){
            console.log(e)
        }


        fs.readFile(item+'\\GPIgnore.json','utf8',function (err,data) {  //  json    
            if(err){    //        ,    json             。
            }else{
                realDirList.push(item);
                emitter.emit('haveGPIgnore',{
                    path:item,
                    data:JSON.parse(data)
                });
            }
        });
    })
    emitter.on('haveGPIgnore',function (data) {
        console.log(data)
    })
}