【问题标题】:Use glob node.js to know if a file exists in the parent folder using wildcard使用 glob node.js 使用通配符了解父文件夹中是否存在文件
【发布时间】:2019-06-01 16:28:51
【问题描述】:

我需要在运行 node.js yeoman 生成器脚本的父文件夹中搜索以查看文件是否存在,但我不知道文件名 - 只知道扩展名。

全局:https://www.npmjs.com/package/glob

文件夹结构:

  • C:\工作\
  • C:\工作\公司\
  • C:\工作\公司\项目\

假设Project 文件夹是命令提示符所在的位置...我想运行一个Yeoman 生成器,它首先查看Company 文件夹以查看是否存在特定文件。它可以是任何文件名,以.sln 结尾。

有很多初学者资源,但我找不到任何显示的示例:

  1. 如何成功查看父文件夹;和
  2. 如何处理输出(真/假?)以在函数后面的逻辑变量中使用。

这就是我尝试做的事情,但无可否认,我在 C# 方面比在 JS 方面更擅长。

var globbed = glob("../*.sln", function(err, files){
    this.log(chalk.yellow("err = " + err));
    this.log(chalk.yellow("files = " + files));
});

还有这个……

var gOptions = { cwd: "../" };
var globbed = glob("*.sln", gOptions, function(err, files){
    this.log(chalk.yellow("err = " + err));
    this.log(chalk.yellow("files = " + files));
});

在这两个例子中,globbed 是一个对象,但我不知道它的属性是什么,并且我无法访问内部函数。

基本上,我需要知道该文件是否存在,以便我可以对其运行 If/Then 语句。

【问题讨论】:

    标签: javascript node.js node-modules glob


    【解决方案1】:

    使用glob.sync:

    const files = glob.sync("*.sln", { cwd: "../" }); 
    

    或者干脆

    const files = glob.sync("../*.sln"); 
    

    files 将是父目录中*.sln 文件(如果有)的数组。显然,glob.sync 是同步的。

    【讨论】:

    • glob.sync() ... 呃!谢谢! :D
    • 第二个选项(没有 cwd 选项)对我不起作用
    【解决方案2】:

    试试这个。

    const path = require('path');
    const glob = require('glob');
    
    glob(
     '*.sln',
     { cwd: path.resolve(process.cwd(), '..') },  // you want to search in parent directory
     (err, files) => {
       if (err) {
         throw err;
       }
    
       if (files.length) {
         // File exists. All matched filenames are inside files array.
       } else {
         // File does not exist. files array is empty.
       }
     }
    );
    

    glob 是一个异步函数,因此结果在回调中提供,而不是同步返回。

    您还可以使用 globster.xyz 测试您的 glob 表达式

    【讨论】:

    • 如果我想将您的示例结果加载到变量中,最好的方法是什么?
    • 它们在files 变量中。只是这个变量可以在回调函数内部访问。如果您不想使用回调函数,请尝试使用 glob.sync(),正如 Mark 在另一个答案中所建议的那样。
    【解决方案3】:

    没用过golb。希望对你有帮助。

    var fs=require('fs');
    var pattern=RegExp('.md$');//Enter file extension here
    fs.readdir('..//',(err,files)=>{
          //console.log(files);
          if(files.find((file)=>{return pattern.test(file)==true;})){
              //console.log('file found');  your code
            }
           else{
             //console.log('file not found'); your code
            }
        });
    

    【讨论】:

    • 这是一个 yeoman 模板生成器,所以 console.log() 不是一个选项。 :(
    • 我已将 console.log 用于测试目的。你可以编辑出来。我也为此编辑了答案
    猜你喜欢
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 2018-08-12
    • 2016-03-27
    • 1970-01-01
    相关资源
    最近更新 更多