исключение grunt (minimatch /glob) папок

У меня возникла ситуация, когда я пытаюсь использовать grunt для создания базы кода, исключая определенные папки.

grunt использует minimatch (похожий на bsdglob) под капотом для сопоставления файлов, но я не могу понять, как сделать исключение папки в стиле .gitignore.

Я бы хотел это проглотить:

ignoreme

и сопоставьте их

/folder/path/here/to/something/ok.js
/another/folder/path.js
/test.js

но не соответствует этим

/folder/ignoreme/something.js
/folder/path/here/to/ignoreme/metoo/file.js

Это будет соответствовать всему, включая ignoreme:

/**/*.js

Я решил, что могу сделать что-то вроде:

/**/!(ignoreme)/**/*.js

но это соответствует файлам в папке ignoreme.

Я привык к регулярным выражениям, но не могу понять, как повторить шаблон или что-то здесь - я также пробовал что-то вроде:

/(!(ignoreme)|*)*/*.js

надеясь, что контейнер повторится, но это не сработает, просто он не будет соответствовать всему.

Есть ли способ передать регулярное выражение в пути к файлам или сделать это для меня?

Update:

Вот как я сейчас занимаюсь этой проблемой:

var pattern = /\/ignoreme\//
var files = grunt.file.expandFiles(arrayOfFilesPassedToMinimatch).filter(function(f){
  return !pattern.test(f)
})

Мне все равно было бы интересно, возможно ли исключение папок в minimatch.

74 голоса | спросил Jesse 28 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 28 Sep 2012 04:34:41 +0400 2012, 04:34:41

1 ответ


0

В текущей версии 0.4.0a метод grunt.file.expand теперь поддерживает исключения и делает это, возможно, в меньшей степени. сложный способ, чем базовая библиотека соответствия соответствия. Это возможно потому, что grunt.file.expand принимает несколько шаблонов (тогда как minimatch принимает только один).

Из документации grunt.file.expand :

  

Этот метод принимает либо шаблоны подстановочных знаков, разделенные запятыми, либо массив шаблонов подстановочных знаков. Пути, соответствующие шаблонам, которые начинаются с! будет исключен из возвращенного массива. Шаблоны обрабатываются по порядку, поэтому порядок включения и исключения имеет большое значение.

Это означает, что вы можете указать ['/**/*.js', '!**/ignoreme/**'] и в то время как первый шаблон добавит все .js к результирующему набору, второй шаблон затем удалит все файлы /ignoreme/ из результирующего набора .

Взгляните на grunt.file.match модульные тесты если вам действительно любопытно.

Обратите внимание, что версия grunt, предлагающая эту функцию, официально не была выпущена, но если вы заинтересованы в ее использовании в проекте, см. Когда я смогу использовать функцию« X »в процессе разработки? Часто задаваемые вопросы.

ответил Cowboy Ben Alman 28 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 28 Sep 2012 07:12:57 +0400 2012, 07:12:57

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132