nodejs生成项目目录树

本文介绍了一段使用Node.js生成项目目录树的代码,通过递归遍历目录,排除node_modules文件夹,实现了按ASCII码顺序输出项目结构。代码详细展示了如何读取目录、判断文件类型,并递归处理子目录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录一个项目目录生成代码,方便写文档

// 递归目录树(只能用同步,用异步会出现后面的文件比前面的文件先输出,顺序会乱。)
// 默认按照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);


引用地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值