同步和递归文件系统文件查找

Syncchronously and recursive filesystem file finding

本文关键字:系统文件 查找 文件 递归 同步      更新时间:2023-09-26

我只是有一个简短的问题:

我正在使用 Node.JS 编写一个命令行工具,该工具使用 JSON 模式验证 JSON 文件。所以,现在我有一个问题,当想要获取所有模式时,我总是因为使用异步函数而"未定义",否则只使用同步函数。

对于此命令行工具,不需要异步。

有人可以帮助我并帮助我如何使其正常工作吗?

var getJSONSchemaFiles = function (dir) {
results2 = [];

    var recursive = require('recursive-readdir');
    recursive(dir, function (err, files) {
        // Files is an array of filename
      //  console.log(files);
        files.forEach(function (entry) {
            if (entry.indexOf(".schema.json") > -1) {
                results2.push(entry);
            }
        });
        console.log(results2);
    });
        return results2;
};

正在使用 npm"递归重新添加",但我认为我什至不需要 npm 来做这种事情?

好的,这会同步枚举给定路径下的所有文件:

var fs = require('fs');
function recursiveReaddir(path) {
    var stat = fs.lstatSync(path);
    if(stat.isFile())
        return [path];
    if(!stat.isDirectory())
        return [];
    return [].concat.apply([], fs.readdirSync(path).map(function(fname) {
        return recursiveReaddir(path + '/' + fname);
    }));
}

使用 glob 模块 https://github.com/isaacs/node-glob。有异步和同步方法,如:glob.sync(pattern, [options]);和 glob(模式, [选项], cb);
他们文档中的示例:

var glob = require("glob")
// options is optional
glob("**/*.js", options, function (er, files) {
  // files is an array of filenames.
  // If the `nonull` option is set, and nothing
  // was found, then files is ["**/*.js"]
  // er is an error object or null.
})