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

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

grunt использует минимальную (похожую на 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)
})

Мне все равно будет интересно, если исключение папки исключено в процессе минимизации.

Ответ 1

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

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

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

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

Взгляните на тесты grunt.file.match, если вам действительно интересно.

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