Используйте glob node.js, чтобы узнать, существует ли файл в родительской папке с использованием подстановочного знака - PullRequest
0 голосов
/ 07 января 2019

Мне нужно найти в родительской папке, где работает скрипт генератора yeoman для node.js, чтобы узнать, существует ли файл, но я не буду знать имя файла - только расширение.

Глоб: https://www.npmjs.com/package/glob

Структура папки:

  • C: \ Work \
  • C: \ Work \ Компания \
  • C: \ Work \ Компания \ Project \

Предположим, что в папке Project находится командная строка ... Я хочу запустить генератор Yeoman, который сначала просматривает папку Company, чтобы проверить, существует ли определенный файл. Это может быть любое имя файла, оканчивающееся на .sln.

Существует множество ресурсов для начинающих, но я не могу найти примеров, показывающих:

  1. Как успешно посмотреть в родительской папке; и
  2. Как работать с выводом (true / false?) Для использования в переменной для логики позже в функции.

Вот то, что я пытался сделать, но по общему признанию, я гораздо более опытен в 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.

Ответы [ 3 ]

0 голосов
/ 07 января 2019

Не использовал 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
        }
    });
0 голосов
/ 08 января 2019

Использование glob.sync :

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

или просто

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

files будет массивом *.sln файлов, если таковые имеются, в родительском каталоге. Очевидно, glob.sync является синхронным.

0 голосов
/ 07 января 2019

Попробуйте это.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...