如何使用nodejs步行模块将目录遍历到第一级

How to walk directory till first-level using nodejs walk module

本文关键字:一级 遍历 nodejs 何使用 模块      更新时间:2023-09-26

我有以下目录结构

 Ranveers-MacBook-Air:custom-feeds ranveer$ ls    /Users/ranveer/custom-feeds
README.md   cartridges  sites
Ranveers-MacBook-Air:custom-feeds ranveer$

我想遍历上面的目录,在输出中我只需要第一个目录(即第一级)

所需输出(目录 + 完整路径)

    /
  1. 用户/兰维尔/自定义进料/墨盒
  2. /
  3. 用户/兰维尔/自定义提要/网站

我尝试使用以下代码生成我想要的输出

walk = require('walk');
walker = walk.walk('/Users/ranveer/custom-feeds');
walker.on('directories' , (root, dirStatsArray, next) => {
    console.log(dirStatsArray);
    next();
});

我在节点控制台中得到以下输出

> walker.on('directories' , (root, dirStatsArray, next) => {
...     console.log(dirStatsArray);
...     next();
... });
Walker {
  domain:
   Domain {
     domain: null,
     _events: { error: [Function] },
     _eventsCount: 1,
     _maxListeners: undefined,
     members: [] },
  _events: { directories: [Function] },
  _eventsCount: 1,
  _maxListeners: undefined,
  _wStat: 'lstat',
  _wStatSync: 'lstatSync',
  _wsync: false,
  _wq: [],
  _wqueue: [],
  _wcurpath: '/Users/ranveer/custom-feeds/.git/logs/refs/heads',
  _wfilters: [],
  _wfirstrun: true,
  _wWalk: [Function],
  _wfnodegroups:
   { files: [ [Object] ],
     directories: [],
     symbolicLinks: [],
     blockDevices: [],
     characterDevices: [],
     FIFOs: [],
     sockets: [],
     nodes: [],
     errors: [] },
  _wcurfiles: [ 'master' ],
  _wcurfile: 'master',
  _wCurFileCallback: [Function: next] }
>

我看不到我的console.log打印dirStatsArray

那么,如何遍历目录直到第一级

你不能只使用 fs 和 path 来非递归地遍历目录吗?

var fs = require('fs');
var path = require('path');
var p = './';
fs.readdir(p, function(err, files) {
  files.map(function(file) {
    return path.join(p, file);
  }).filter(function(file) {
    return fs.statSync(file).isDirectory();
  }).forEach(function(file) {
    console.log(file);
  });
});

因此,在查看了 github 上的模块代码并查看了一些已关闭的问题之后,直到深度1 level正确的方法是不要调用 next()

由于next()强制递归调用。

https://github.com/coolaj86/node-walk/issues/28