виключення папки grunt (minimatch / glob)


74

У мене ситуація, коли я намагаюся використовувати 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

сподіваючись, контейнер повториться, але це не спрацьовує, він просто не відповідає усьому.

Будь-який спосіб або передати регулярний вираз до grunt-файлів, або зробити так, щоб це працювало для мене?

Оновлення:

Ось як я зараз маю справу з цією проблемою:

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

Мені все одно буде цікаво, якщо можливі виключення з папки в мінімач.


2
Використання map- це результат, filesщо містить масив TRUEі FALSEзначень. filterбуде правильно встановлено filesяк список відфільтрованих шляхів.
виїзд

Правильно, ти, мабуть, друкував вночі. Оновлений зразок коду для роботи.
Джессі

Відповіді:


148

У поточній версії 0.4.0a, що grunt.file.expandзараз розробляється, метод тепер підтримує виключення, і робить це, можливо, менш складно, ніж основна бібліотека відповідності мінімач. Це можливо, оскільки grunt.file.expandприймає кілька шаблонів (тоді як міні-відповідність приймає лише один).

З документації grunt.file.expand :

Цей метод приймає або шаблони, відокремлені комами, або масив шаблонів шаблонів. Шляхи, що відповідають шаблонам, які починаються з! буде виключено з поверненого масиву. Шаблони обробляються в порядку, тому порядок включення та виключення є важливим.

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

Подивіться на модульні тести grunt.file.match, якщо вам справді цікаво.

Зверніть увагу, що версія grunt, що пропонує цю функцію, офіційно не випущена, але якщо ви зацікавлені у використанні її в проекті, див. Розділ " Коли я зможу використовувати функцію" X "у розробці? Введення запитань.


Велике спасибі за відповідь! Це виглядає набагато елегантнішим рішенням моєї проблеми - я буду чекати стабільного випуску, але перейду, коли він вийде!
Джессі

14
Варто зазначити: шаблони виключення працюють лише тоді, коли вони з’являються ПІСЛЯ того, що б воно не було, їх виключення було узгоджене за шаблоном включення. Розгубився, поставивши на перший план мої шаблони виключення.
Джастін Сірлз

3
grunt watch --verbose, щоб побачити, які файли переглядаються
Shanimal

Це круто. Думав, мені доведеться написати якийсь дивний фільтр, аби просто проігнорувати файл.
Джефф
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.