Как исключить node_modules из шаблона глобуса

Я пытаюсь создать скрипт, который будет искать определенный текст в каталоге моих проектов.

Вот пример поиска всех файлов в текущем каталоге, включая node_modules.

const glob = require('glob')

async function searchFiles(directory) {
  return new Promise((resolve, reject) => {
    glob(`${directory}/**/*`, { ignore: ['./node_modules/*'] }, (error, files) => {
      if (error) reject(error)
      resolve(files)
    })
  })
}

async function start() {
  const files = await searchFiles('./').catch(error => console.info(error))
  console.info(files)
}

start()

Вывод, который я получаю в консоли, следующий

[
  './app.js',
  './code.js',
  './node_modules',
  './node_modules/balanced-match/index.js',
  './node_modules/balanced-match/LICENSE.md',
  './node_modules/balanced-match/package.json',
  './node_modules/balanced-match/README.md',
  './node_modules/bindings/bindings.js',
  './node_modules/bindings/LICENSE.md',
  './node_modules/bindings/package.json',
  './node_modules/bindings/README.md',
  './node_modules/brace-expansion/index.js',
  './node_modules/brace-expansion/LICENSE',
  './node_modules/brace-expansion/package.json',
  './node_modules/brace-expansion/README.md',
  './node_modules/fast-string-search/benchmark',
  './node_modules/fast-string-search/benchmark/benchmark.js',
  './node_modules/fast-string-search/binding.gyp',
  './node_modules/fast-string-search/build',
  './node_modules/fast-string-search/build/binding.sln',
  './node_modules/fast-string-search/build/config.gypi',
  './node_modules/fast-string-search/build/fast-string-search.vcxproj',
  './node_modules/fast-string-search/build/fast-string-search.vcxproj.filters',
  './node_modules/fast-string-search/build/Release',
  './node_modules/fast-string-search/build/Release/fast-string-search.exp',
  './node_modules/fast-string-search/build/Release/fast-string-search.iobj',
  './node_modules/fast-string-search/build/Release/fast-string-search.ipdb',
  './node_modules/fast-string-search/build/Release/fast-string-search.lib',
  './node_modules/fast-string-search/build/Release/fast-string-search.node',
  './node_modules/fast-string-search/build/Release/fast-string-search.pdb',
  './node_modules/fast-string-search/build/Release/obj',
  './node_modules/fast-string-search/build/Release/obj/fast-string-search',
  './node_modules/fast-string-search/build/Release/obj/fast-string-search/fast-str.B35216B5.tlog',
  './node_modules/fast-string-search/build/Release/obj/fast-string-search/fast-str.B35216B5.tlog/CL.command.1.tlog',
  './node_modules/fast-string-search/build/Release/obj/fast-string-search/fast-str.B35216B5.tlog/CL.read.1.tlog',
  './node_modules/fast-string-search/build/Release/obj/fast-string-search/fast-str.B35216B5.tlog/CL.write.1.tlog',
  './node_modules/fast-string-search/build/Release/obj/fast-string-search/fast-str.B35216B5.tlog/fast-string-search.lastbuildstate',
  './node_modules/fast-string-search/build/Release/obj/fast-string-search/fast-str.B35216B5.tlog/fast-string-search.write.1u.tlog',
  './node_modules/fast-string-search/build/Release/obj/fast-string-search/fast-str.B35216B5.tlog/link.command.1.tlog',
  './node_modules/fast-string-search/build/Release/obj/fast-string-search/fast-str.B35216B5.tlog/link.read.1.tlog',
  './node_modules/fast-string-search/build/Release/obj/fast-string-search/fast-str.B35216B5.tlog/link.write.1.tlog',
  './node_modules/fast-string-search/build/Release/obj/fast-string-search/fast-string-search.node.recipe',
  './node_modules/fast-string-search/build/Release/obj/fast-string-search/src',
  './node_modules/fast-string-search/build/Release/obj/fast-string-search/src/fast-string-search.obj',
  './node_modules/fast-string-search/build/Release/obj/fast-string-search/win_delay_load_hook.obj',
  './node_modules/fast-string-search/index.js',
  './node_modules/fast-string-search/LICENSE',
  './node_modules/fast-string-search/package.json',
  './node_modules/fast-string-search/README.md',
  './node_modules/fast-string-search/src',
  './node_modules/fast-string-search/src/fast-string-search.c',
  './node_modules/fast-string-search/test',
  './node_modules/fast-string-search/test/test.js',
  './node_modules/file-uri-to-path/History.md',
  './node_modules/file-uri-to-path/index.d.ts',
  './node_modules/file-uri-to-path/index.js',
  './node_modules/file-uri-to-path/LICENSE',
  './node_modules/file-uri-to-path/package.json',
  './node_modules/file-uri-to-path/README.md',
  './node_modules/file-uri-to-path/test',
  './node_modules/file-uri-to-path/test/test.js',
  './node_modules/file-uri-to-path/test/tests.json',
  './node_modules/fs.realpath/index.js',
  './node_modules/fs.realpath/LICENSE',
  './node_modules/fs.realpath/old.js',
  './node_modules/fs.realpath/package.json',
  './node_modules/fs.realpath/README.md',
  './node_modules/glob/common.js',
  './node_modules/glob/glob.js',
  './node_modules/glob/LICENSE',
  './node_modules/glob/package.json',
  './node_modules/glob/README.md',
  './node_modules/glob/sync.js',
  './node_modules/inflight/inflight.js',
  './node_modules/inflight/LICENSE',
  './node_modules/inflight/package.json',
  './node_modules/inflight/README.md',
  './node_modules/inherits/inherits_browser.js',
  './node_modules/inherits/inherits.js',
  './node_modules/inherits/LICENSE',
  './node_modules/inherits/package.json',
  './node_modules/inherits/README.md',
  './node_modules/minimatch/lib',
  './node_modules/minimatch/lib/path.js',
  './node_modules/minimatch/LICENSE',
  './node_modules/minimatch/minimatch.js',
  './node_modules/minimatch/package.json',
  './node_modules/minimatch/README.md',
  './node_modules/once/LICENSE',
  './node_modules/once/once.js',
  './node_modules/once/package.json',
  './node_modules/once/README.md',
  './node_modules/wrappy/LICENSE',
  './node_modules/wrappy/package.json',
  './node_modules/wrappy/README.md',
  './node_modules/wrappy/wrappy.js',
  './package-lock.json',
  './package.json'
]

Как я могу исключить node_modules из шаблона поиска?

Пробовал искать, но не смог найти шаблон, исключающий исключительно каталог node_modules

любая помощь приветствуется

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В вашем шаблоне игнорирования отсутствует двойная звездочка, поэтому вам следует реорганизовать свой searchFiles следующим образом:

async function searchFiles(directory) {
  return new Promise((resolve, reject) => {
    glob(`${directory}/**/*`, { ignore: ['./node_modules/**'] }, (error, files) => {
      if (error) reject(error)
      resolve(files)
    })
  })
}

двойная звездочка (**) буквально означает «все (файлы и папки) вниз»

Это сработало! Спасибо. Есть ли способ рекурсивно применить этот шаблон, например, если я создам вложенные node_modules, он все равно обнаружит его. test/node_modules/{package_name} <- обнаруживается

Andronik Nazaryan 04.11.2022 10:59
./node_modules/** означает, что из вашего текущего каталога (./) вы исключаете папку (node_modules) и всех возможных дочерних элементов. Чтобы навсегда исключить node_modules, вы можете преобразовать этот шаблон глобуса в **/node_modules/**
illeb 04.11.2022 11:41

Другие вопросы по теме