nodejs 制作項目目錄樹代碼


// 遞歸目錄樹(只能用同步,用異步會出現后面的文件比前面的文件先輸出,順序會亂。)
// 默認按照ASCII碼的順序,例如js里面的sort()函數。

// 先寫一層的情況
// 抽象遞歸參數
// 找到突破點(避免死循環)
//   自己調自己,某種情況(肯定會存在的)不調用


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

// 獲取當前有沒有傳入目標路徑
var target = path.join(__dirname, process.argv[2] || './');

function load(target, depth) {
  // depth  0 = ''
  // depth  1 = '│ '
  // depth  2 = '│ │ '
  var prefix = new Array(depth + 1).join('│ ');// join()函數的妙用

  //  讀取一個目錄的內容,返回一個不包括 '.' 和 '..' 的文件名的數組。
  var dirinfos = fs.readdirSync(target);

  var dirs = [];
  var files = [];

  dirinfos.forEach(info=> {
  	// 返回一個 fs.Stats 實例
    var stats = fs.statSync(path.join(target, info));
    if (stats.isFile()) {
      files.push(info);
    } else {
      dirs.push(info);
    }
  });

  dirs.forEach(dir=> {
    console.log(`${prefix}├─${dir}`); // node_modules
    // 當前是一個目錄 需要深入進去
    load(path.join(target, dir), depth + 1);
  });

  var count = files.length - 1;  // 此處必須-1與下面的count--想對應
  files.forEach(file=> {
    var temp = count-- ? '├' : '└';  // 三元運算符的妙用
    console.log(`${prefix}${temp}─${file}`);
  });
}


load(target, 0);
//

// 無級分類

flie.js

 

node file.js

 

依賴了 fs

 

2019年8月12日10:11:39 

做了優化 優化忽略目錄 代碼直接貼上

 

// 遞歸目錄樹(只能用同步,用異步會出現后面的文件比前面的文件先輸出,順序會亂。)
// 默認按照ASCII碼的順序,例如js里面的sort()函數。
 
// 先寫一層的情況
// 抽象遞歸參數
// 找到突破點(避免死循環)
//   自己調自己,某種情況(肯定會存在的)不調用
 
 
const fs = require('fs');
const path = require('path');
 
// 獲取當前有沒有傳入目標路徑
var target = path.join(__dirname, process.argv[2] || './');

function changstrs(str){
    //D:\webnews\xzy\demo\node_modules\@babel\runtime\helpers
    let ss = "";

    for(var s=0;s<str.length;s++){
        let item = str[s];

        if((item!="/" &&  item!="@") && item!=":"){
            ss+=item;
        }
    }
    

    /* str.forEach((item,index)=>{
        if((item!="/" &&  item!="@") && item!=":"){
            ss+=item;
        }
    }) */


    return ss;
}

 
function load(target, depth) {
  // depth  0 = ''
  // depth  1 = '│ '
  // depth  2 = '│ │ '
  var prefix = new Array(depth + 1).join('│ ');// join()函數的妙用
  //console.log("target",target);
  //console.log("target",depth);

  let ssf = changstrs(target);
  if(ssf.indexOf("node_modules") != -1 ){//如果是npm包
    return false;
  }
 
  //  讀取一個目錄的內容,返回一個不包括 '.' 和 '..' 的文件名的數組。
  var dirinfos = fs.readdirSync(target);
 
  var dirs = [];
  var files = [];
 
  dirinfos.forEach(info=> {
    // 返回一個 fs.Stats 實例
    var stats = fs.statSync(path.join(target, info));
    if (stats.isFile()) {
      files.push(info);
    } else {
      dirs.push(info);
    }
  });
 
  dirs.forEach(dir=> {
    console.log(`${prefix}├─${dir}`); // node_modules
    // 當前是一個目錄 需要深入進去
    load(path.join(target, dir), depth + 1);
  });
 
  var count = files.length - 1;  // 此處必須-1與下面的count--想對應
  files.forEach(file=> {
    var temp = count-- ? '├' : '└';  // 三元運算符的妙用
    console.log(`${prefix}${temp}─${file}`);
  });
}
 
 
load(target, 0);
//
 
// 無級分類

 

 

媽媽再也不怕項目交接不好寫文檔了 哈哈哈~~~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM