Объяснение Globs#

Glob - это строка буквенных символов и/или подстановочных знаков, используемых для сопоставления путей к файлам. Globbing - это поиск файлов в файловой системе с помощью одного или нескольких globs.

Метод src() ожидает, что одна глобальная строка или массив глобов определят, с какими файлами будет работать ваш конвейер. Для ваших глобов должно быть найдено хотя бы одно совпадение, иначе src() выдаст ошибку. Когда используется массив глобов, они сопоставляются в порядке массива, что особенно полезно для отрицательных глобов.

Сегменты и разделители#

Сегмент - это все, что находится между разделителями. Разделителем в глобе всегда является символ / - независимо от операционной системы - даже в Windows, где разделителем пути является \\. В glob, \\ зарезервирован как escape-символ.

Здесь * экранирована, поэтому он рассматривается как литерал, а не подстановочный знак.

'glob_with_uncommon_\\*_character.js'

Избегайте использования методов Node path, таких как path.join, для создания globs. В Windows он создает недопустимый glob, потому что Node использует \\ в качестве разделителя. Также избегайте глобальных __dirname, __filename или process.cwd() по тем же причинам.

const invalidGlob = path.join(__dirname, 'src/*.js');

Специальный символ: * (одиночная звездочка)#

Соответствует любому количеству (включая ни одного) символов в одном сегменте. Полезно для добавления файлов в один каталог.

Этот глоб будет соответствовать файлам типа index.js, но не файлам вроде scripts/index.js или scripts/nested/index.js

'*.js'

Специальный символ: ** (двойная звездочка)#

Соответствует любому количеству (включая ни одного) символов в сегментах. Полезно для подстановки файлов во вложенных каталогах. Убедитесь, что вы соответствующим образом ограничили ваши двойные звезды, чтобы избежать ненужного сопоставления больших каталогов.

Здесь глоб соответствующим образом ограничен каталогом scripts/. Он будет соответствовать таким файлам, как scripts/index.js, scripts/nested/index.js и scripts/nested/twice/index.js.

'scripts/**/*.js'
В предыдущем примере, если `scripts/` не было префиксом, все зависимости в `node_modules` или других каталогах также были бы сопоставлены.

Специальный символ: ! (отрицание)#

Поскольку globs сопоставляются в порядке массива, отрицательный глоб должен следовать по крайней мере за одним неотрицательным глобом в массиве. Первый находит набор совпадений, затем отрицательный глоб удаляет часть этих результатов. При исключении всех файлов в каталоге вы должны добавить /** после имени каталога, которое библиотека подстановки оптимизирует внутренне.

['scripts/**/*.js', '!scripts/vendor/**']

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

['scripts/**/*.js', '!scripts/vendor/**', 'scripts/vendor/react.js']

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

['**/*.js', '!node_modules/**']
В предыдущем примере, если отрицательный глоб был `!node_modules/**/*.js`, библиотека подстановки не оптимизировала бы отрицание, и каждое совпадение пришлось бы сравнивать с отрицательным глобом, что было бы очень медленно. Чтобы игнорировать все файлы в каталоге, добавьте только глоб `/**` после имени каталога.

Перекрывающиеся глобы#

Два или более глоба, которые (не) намеренно соответствуют одному и тому же файлу, считаются перекрывающимися. Когда перекрывающиеся глобы используются в одном src(), gulp делает все возможное, чтобы удалить дубликаты, но не пытается выполнять дедупликацию между отдельными вызовами src().

Дополнительные ресурсы#

Здесь описывается большая часть того, что вам нужно для работы с глобами в gulp. Если вы хотите получить более подробную информацию, вот несколько ресурсов.