Исключение файлов/каталогов из задачи Gulp
У меня есть задача gulp rjs, которая объединяет и угадывает все мои пользовательские .JS файлы (любые библиотеки не-поставщиков).
То, что я пытаюсь сделать, исключает некоторые файлы/каталоги из этой задачи (контроллеры и директивы).
Heres my tree:
- application
- resources
- js
main.js
- vendor
- jquery
- modernzr
- angular
- controllers
- controller1
- controller2
- controller3
- directives
- directives1
- directives2
- directives3
- widgets
- widget1
- widget2
- widget3
- widget4
- modules
- modules1
- modules2
- modules3
- modules4
Здесь мой gulp.js
dir = {
app: 'application',
dest: 'dest',
};
config = {
src: {
js: dir.app + '/resources/js'
},
dest: {
js: dir.dest + '/resources/js'
}
};
gulp.task('rjs', function() {
rjs({
baseUrl: config.src.js,
out: 'main.js',
name: 'main',
mainConfigFile: config.src.js + '/main.js',
exclude: [ 'jquery', 'angular']
})
.pipe(prod ? uglify({ mangle: false, outSourceMap: true, compress: { drop_console: true } }) : gutil.noop())
.pipe(gulp.dest(config.dest.js))
.pipe(filesize())
.pipe(dev ? connect.reload() : gutil.noop());
});
Ответы
Ответ 1
Быстрый ответ
В src вы всегда можете указать файлы для игнорирования с помощью "!".
Пример (вы хотите исключить все *.min.js файлы в папке js и вложенной папке:
gulp.src(['js/**/*.js', '!js/**/*.min.js'])
Вы можете сделать это также для отдельных файлов.
Расширенный ответ:
Извлечен из gulp документации:
gulp.src(globs [, options])
Испускает файлы, соответствующие предоставленному glob или массив глобусов. Возвращает поток виниловых файлов, которые могут быть подключены к плагинам.
glob ссылается на синтаксис node -glob или это может быть прямой путь к файлу.
Итак, глядя на node -glob documentation, мы видим, что он использует библиотеку минимизации, чтобы выполнить ее соответствие.
В документации по минимизации они указывают на следующее:
если шаблон начинается с a! символ, то он отрицается.
И вот почему используя! символ исключает файлы/каталоги из задачи gulp
Ответ 2
Gulp использует micromatch под капотом для сопоставления глобусов, поэтому если вы хотите исключить любой из файлов .min.js, вы можете добиться того же, используя расширенную функцию глобализации, например:
src("'js/**/!(*.min).js")
По сути, это так: захватывать все на любом уровне внутри js, который не заканчивается на *.min.js