• 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:webnewsxzydemo
    ode_modules@babel
    untimehelpers
        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);
    //
     
    // 无级分类

    妈妈再也不怕项目交接不好写文档了 哈哈哈~~~

  • 相关阅读:
    自签证书的创建与导入
    Linux常用命令
    JS数据类型
    call和apply
    css浮动Float
    vue 列表进入详情后,返回保持原位置
    vue-cli2升级为vue-cli3
    html2canvas使用中的小问题
    jquery点击空白处关闭弹窗
    template.js中template模板中onclick传参
  • 原文地址:https://www.cnblogs.com/shaozhu520/p/10922658.html
Copyright © 2020-2023  润新知